Фабрика создает объекты, которые нуждаются в других объектах

Мне нужен фабричный объект, способный создавать несколько объектов, но вводить в них другие объекты. Например:

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());
Другие вопросы по тегам