2017-02-02 1 views
1

안녕하세요 제 질문은 해당 생성자에서 같은 수의 인수를 가진 클래스에 대해 팩터 리 패턴을 사용할 수 있는지에 관한 것입니다. 예를 들어, IVerify이라는 인터페이스가 있습니다. 내가 그들을 구현이 개 클래스를 가지고 생성자의 INT의 납입 취하는 생성자에 문자열 이름에 소요 NameVerifier, 및 IntegerVerifier. 이 경우 공장 패턴을 수행 할 수 있습니까?팩토리 메서드 패턴을 다른 인수에 사용하는 경우

수있는 우리 사용 IVerify Factory.CreateNameVerifier (문자열)IVerify Factory.createIntegerVerifier (INT)이가 여전히 공장 패턴으로 간주되어 있습니까?

추가 참고 : 임 사용하여 C++ NameVerifierIntegerVerifier의 많은 버전이 다음 솔루션은 당신이 CreateNameVerifierCreateIntegerVerifier 내부 인스턴스화하는 클래스 추출되기 때문에 팩토리 패턴이 여전히 존재하는 경우

+0

런타임 유효성 검사기 (유효성 검사기)에 구성 값 생성자에 유효성 검사 값을 입력하는 것처럼 보입니다. 이것은 나쁜 생각입니다. [여기에 설명되어 있습니다] (https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=99). – Steven

답변

1

.

그러나 Verifiers 그들이 즉 걸릴 인수의 유형에 고유 한 WRT 경우,이 하나의 NameVerifier 단 하나의 IntergerVerifier과 그들이 다음 기존 솔루션은 단지 개체를 만들 래퍼의 일종을 만드는 때문에 유형의 차이/Verifiers. 이러한 경우 그 결과는 아래와 같습니다 :

참조 : Factory Pattern

class IVerify 
{ 
}; 

class CNameVerifier : public IVerify 
{ 
}; 

class CIntegerVerifier : public IVerify 
{ 
}; 

class CVerifierFactory 
{ 
    enum TYPE 
    { 
     STRING, 
     INTEGER 
    }; 

    template<typename T> 
    IVerify* CreateVerifier(const CVerifierFactory::TYPE &_enumType, T _Parameter) 
    { 
     IVerify *pVerifier = NULL; 
     switch(_enumType)  
     { 
      case (CVerifierFactory::STRING) 
       pVerifier = new CNameVerifier(_Parameter); 
       break; 
      case (CVerifierFactory::INTEGER) 
       pVerifier = new CIntegerVerifier(_Parameter); 
       break;    
     } 

     return pVerifier; 
    } 
}; 

CVerifierFactory g_oFactory; 
IVerify *pVerifier = g_oFactory.CreateVerifier(CVerifierFactory::STRING, "Alex"); 
if(pVerifier != NULL) 
{ 
    //use pVerifier 
} 

참고 : Verifiers를 작성하기 전에 완료되지 않은 _Parameter 인수 엄격한 유형 검사. Variadic Template/Parameter pack을 사용하여 개체 생성 인수의 수를 늘릴 수 있습니다.

관련 문제