신기 한 디자인 모델 의 공장 방법 모델
5542 단어 신기 한 디자인 패턴
//
class EncryptBase
{
public:
EncryptBase() {}
virtual void Print() {}
virtual ~EncryptBase() {}
};
class AESEncrypt :public EncryptBase
{
public:
AESEncrypt() {}
void Print() { std::cout << "This is aes!
"; }
virtual ~AESEncrypt() {}
};
class DESEncrypt :public EncryptBase
{
public:
DESEncrypt() {}
void Print() { std::cout << "This is des!
"; }
virtual ~DESEncrypt() {}
};
// , ,
class EncryptFactory
{
public:
EncryptFactory() {}
EncryptBase* createEncryptMethod(int iValue);
virtual ~EncryptFactory() {}
};
EncryptBase* EncryptFactory::createEncryptMethod(int iValue)
{
switch (iValue)
{
case 1:
return new AESEncrypt();
break;
case 2:
return new DESEncrypt();
break;
default:
return NULL;
break;
}
}
int main()
{
EncryptFactory fac;
EncryptBase* ebPtr = fac.createEncryptMethod(1);
ebPtr->Print();
system("pause");
return 0;
}
간단 한 공장 은 이 렇 습 니 다. 간단 하지 않 습 니까? 하하.새로운 암호 화 알고리즘 이 추가 되면 암호 화 류 를 파생 시 키 는 동시에 공장 안의 분기 판단 조건 을 수정 하면 된다.이것 은 바로 간단 한 공장 의 폐단 이다. 공장 류 를 수정 하 는 것 은 개방 폐쇄 원칙 에 위배 된다.
개방 폐쇄 원칙 은 쉽게 말 하면 확장 개방, 수정 폐쇄 에 대한 것 이다.
그런데 왜 저 는 간단 한 공장 모델 을 사용 합 니까? 제 암호 화 알고리즘 의 종 류 는 확실 하기 때문에 확장 을 고려 하지 않 습 니 다. 그래서 저 는 게 으 름 을 피 우 고 간단 한 공장 모델 을 사 용 했 습 니 다.확장 성 을 고려 하면 제 가 다시 개선 한 것 은 23 가지 디자인 모델 중의 공장 방법 모델 입 니 다.2. 공장 방법 모델 이 간단 한 공장 은 공장 류 에서 어떤 암호 화 류 를 논리 적 으로 판단 하고 이 내부 논 리 를 판단 하여 옮 겨 클 라 이언 트 에서 판단 할 수 있 습 니까?공장 방법 모드: 대상 을 만 드 는 데 사용 할 인 터 페 이 스 를 정의 하여 하위 클래스 가 어떤 종 류 를 예화 할 지 결정 합 니 다.[정 걸 의 '큰소리 디자인 모델'] 코드 는 다음 과 같 습 니 다. 공장 류 만 수 정 했 습 니 다.
class EncryptFactoryBase
{
public:
EncryptFactoryBase() {};
EncryptBase* createEncryptMethod() {};
virtual ~EncryptFactoryBase() {};
};
class AESEncryptFactory:public EncryptFactoryBase
{
public:
AESEncryptFactory() {};
EncryptBase* createEncryptMethod()
{
return new AESEncrypt();
}
virtual ~AESEncryptFactory() {};
};
class DESEncryptFactory :public EncryptFactoryBase
{
public:
DESEncryptFactory() {};
EncryptBase* createEncryptMethod()
{
return new DESEncrypt();
}
virtual ~DESEncryptFactory() {};
};
int main()
{
AESEncryptFactory aesFac;
EncryptBase* ebPtr = aesFac.createEncryptMethod();
ebPtr->Print();
DESEncryptFactory desFac;
EncryptBase* ebPtr1 = desFac.createEncryptMethod();
ebPtr1->Print();
system("pause");
return 0;
}
공장 방법 모델 은 한 공장 의 기 류 를 정의 하고 구체 적 인 공장 을 파생 시 켜 구체 적 인 제품 을 생산 한다.그 밖 에 개방 - 폐쇄 원칙 에 부합 되 고 새로운 암호 화 알고리즘 을 추가 하 며 암호 화 기능 류 를 쓰 고 파생 공장 류 를 쓰 면 됩 니 다. 공장 류 를 수정 하 는 것 이 아 닙 니 다.이것 이 바로 제 가 공장 방법 모델 에 대한 부분 입 니 다. 아직 너무 요리 가 부족 해서 잘못 이해 할 수 있 습 니 다. 잘못된 점 이 있 으 면 개인 적 으로 제 가 고 쳐 주 십시오.