2016-04-06 3 views
4

Я работаю с silexphp/Pimple Контейнеры для инъекций зависимостей (DIC) и не уверены, как обращаться с классическим шаблоном Factory.Контейнер для инъекций на основе PHP с фабрикой

Пример:

Родитель класс Animal.php имеет два дочерних классов, называемых DogAnimal.php и CatAnimal.php. Количество дочерних классов может расти.

В этом случае я бы хотел создать фабрику для создания новых объектов или детей класса Animal. Pimple позволяет создавать методы Factory для каждой службы.

При использовании Pimple DIC я не думаю, что хочу добавить каждый подкласс (Dog, Cat и т. Д.) В качестве сервиса. Тем более, что список растет. Для меня это похоже на неправильное использование DIC, но, возможно, я ошибаюсь.

Правильно ли я полагаю, что I должен создать сервис Animal Factory и использовать Pimple для установки зависимостей на заводе, который, в свою очередь, используется для создания новой собаки или кошки?

ответ

3

Да, вы правы. Вы можете создать службу (AnimalFactory), которая создаст объект, который вы хотите использовать (DogAnimal, CatAnimal, ...).

Простой пример может быть:

class AnimalFactory 
{ 
    public function createAnimal($name) 
    { 
     // some logic here with $name 

     $animal = new ...(); 
     return $animal; 
    } 
} 

$pimple['animal_factory'] = function ($c) { 
    return new AnimalFactory(); 
}; 

$dog = $pimple['animal_factory']->createAnimal('Dog'); 
+0

Высокий. Спасибо за проверку работоспособности. – webish

Смежные вопросы