Мне нужен фабричный объект, способный создавать несколько объектов, но вводить в них другие объекты.
Например:
class MyFactory
{
public function createObjectA() {
return new ObjectA(new ObjectANeededObject1(), new ObjectANeededObject1());
}
public function createObjectB() {
return new ObjectB(new ObjectBNeededObject1(), new ObjectBNeededObject1());
}
}
Должна ли моя фабрика также создавать экземпляр необходимого объекта (учитывая, что моей фабрике разрешено создавать любые объекты)?
Должен ли я передать их путем инъекции в конструктор фабрики (но конструктор будет содержать много много много параметров)?
Должен ли я передать их в качестве параметра в мой метод фабрики (но клиент фабрики будет тогда знать, как должен создаваться создаваемый объект, и не обязан знать его)?
Должна ли моя фабрика создавать конструкторы объектов (способные создавать мои объекты и их требуемые объекты) вместо моего объекта напрямую?
Что вы рекомендуете?
Спасибо,
Бен
Твой класс Factory
не должен знать, как создать экземпляр объекта из класса ObjectBNeededObject1
потому что если конструктор изменится, вам придется вернуться и к классу Factory
и сделать необходимую работу, чтобы избежать регрессии
ОБНОВЛЕНО
class MyFactory
{
public static function createObjectA($object1, $object2) {
return new ObjectA($object1, $object2);
}
public static function createObjectB($object1, $object2) {
return new ObjectB($object1, $object2);
}
}
$objectA = MyFactory->createObjectA(new ObjectANeededObject1(), new ObjectANeededObject1());
$objectB = MyFactory->createObjectB(new ObjectANeededObject1(), new ObjectANeededObject1());
Других решений пока нет …