PHP 依赖注入容器与工厂

4
我正在使用依赖注入容器(DIC),但不确定如何处理经典的工厂模式。

例如:

父类有两个子类,称为和。 子类的数量可以增加。

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

在使用Pimple DIC时,我认为不应该将每个子类(Dog,Cat等)添加为服务。 尤其是当列表增长时。 对我来说,这似乎是DIC的误用,但也许我错了。

我是否正确地假设我应该创建一个Animal Factory服务,并使用Pimple向工厂注入依赖项,然后用于创建新的Dog或Cat?

1个回答

3

是的,你说得对。你可以创建一个服务(AnimalFactory),用于创建你想要使用的对象(DogAnimalCatAnimal等)。

一个简单的例子可以是:

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');

太好了。感谢您进行健全性检查。 - webish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接