2014-10-09 2 views

답변

1

팩토리는 컨텍스트마다 하나의 서비스를 만드는 데 사용됩니다. Abstract Factory는 컨텍스트 당 많은 유사한 서비스를 생성하는 데 사용됩니다. 예를 들어, 응용 프로그램에 데이터베이스에 연결되고 "사용자"테이블에서 데이터를 가져올 수있는 단일 저장소 "UsersRepository"가 필요하다고 상상해보십시오. 당신은 다음과 같은이 서비스에 대한 공장을 만들 것입니다 :

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

그러나, 현실 세계에서, 당신은 응용 프로그램에서 많은 테이블과 상호 작용 할 수 있으므로 각에 대한 저장소 서비스를 생성하는 추상 공장을 활용하는 것이 좋습니다 표.

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(); 
    } 
} 

여기서 알 수 있듯이, 애플리케이션의 각 저장소 서비스에 대해 별도의 팩토리를 만들 필요가 없습니다.

관련 문제