ZF2中Factory和Abstract Factory之间的基本区别是什么
答案 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();
}
}
如您所见,您不必为应用程序中的每个存储库服务创建单独的工厂。