Zend框架中的工厂和抽象工厂2

时间:2014-10-09 12:06:40

标签: zend-framework2 zend-framework-mvc

ZF2中Factory和Abstract Factory之间的基本区别是什么

1 个答案:

答案 0 :(得分:1)

Factory用于为每个上下文创建单个服务。 Abstract Factory用于为每个上下文创建许多类似的服务。 例如,假设您的应用程序需要一个连接到您的数据库的单个存储库“UsersRepository”,并允许您从“Users”表中获取数据。您将为此服务创建一个工厂,如下所示:

class UsersRepositoryFactory implements FactoryInterface
{
    public createService(ServiceLocatorInterface $serviceLocator)
    {
        return new \MyApp\Repository\UsersRepository();
    }
}

但是,在现实世界中,您可能希望与应用程序中的许多表进行交互,因此您应该考虑使用Abstract Factory为每个表创建存储库服务。

class RepositoryAbstractFactory implements AbstractFactoryInterface
{
    canCreateServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
    {
        return class_exists('\MyApp\Repository\'.$requestedName);
    }

    createServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
    {
        $class = '\MyApp\Repository\'.$requestedName;
        return new $class();
    }
}

如您所见,您不必为应用程序中的每个存储库服务创建单独的工厂。