Фабрика создает объекты, которые нуждаются в других объектах
Мне нужен фабричный объект, способный создавать несколько объектов, но вводить в них другие объекты. Например:
class MyFactory
{
public function createObjectA() {
return new ObjectA(new ObjectANeededObject1(), new ObjectANeededObject1());
}
public function createObjectB() {
return new ObjectB(new ObjectBNeededObject1(), new ObjectBNeededObject1());
}
}
Должна ли моя фабрика также создавать экземпляр необходимого объекта (учитывая, что моей фабрике разрешено создавать любые объекты)? Должен ли я передать их путем инъекции в конструктор фабрики (но конструктор будет содержать много много много параметров)? Должен ли я передать их в качестве параметра в мой метод фабрики (но клиент фабрики будет тогда знать, как должен быть создан создаваемый объект, и не обязан знать его)? Должна ли моя фабрика создавать конструкторы объектов (способные создавать мои объекты и их требуемые объекты) вместо моего объекта напрямую?
Что вы рекомендуете?
Спасибо,
Бен
1 ответ
Твой класс 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());