4

我正在使用silexphp/Pimple依赖注入容器(DIC)并且不确定如何处理经典的工厂模式。

例子:

父类Animal.php有两个子类,称为DogAnimal.phpCatAnimal.php。子班的数量可以增加。

在这种情况下,我想创建一个工厂来创建新的 Animal 对象或 Animal 类的孩子。Pimple 确实允许为每个服务创建工厂方法。

在使用 Pimple DIC 时,我认为我不想将每个子类(狗、猫等)添加为服务。特别是随着列表的增长。对我来说,这似乎是对 DIC 的滥用,但也许我错了。

我是否正确假设我应该创建一个动物工厂服务并使用 Pimple 将依赖项注入工厂,而工厂又用于创建新的狗或猫?

4

1 回答 1

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');
于 2016-04-06T13:20:27.040 回答