신기 한 디자인 모델 의 공장 방법 모델

최근 작업 중 에 이러한 상황 이 있 습 니 다. 데 이 터 를 암호 화하 고 서로 다른 암호 화 알고리즘 을 사 용 했 지만 암호 화 알고리즘 의 종류 가 고정 되 고 초기 조건 에 따라 서로 다른 암호 화 알고리즘 을 사 용 했 습 니 다.처음에 익숙 하지 않 았 는데 나중에 디자인 모델 에 대응 하 는 처리 방법 이 있다 는 것 을 알 게 되 었 기 때문에 기록 을 해서 자신 과 여러분 이 참고 하도록 하 겠 습 니 다.여기 서 서로 다른 초기 조건 에 따라 서로 다른 암호 화 알고리즘 을 예화 해 야 하기 때문에 간단 한 공장 모델 을 생각 할 수 있 습 니 다.1. 간단 한 공장 모델 암호 화 기본 클래스: 구체 적 인 암호 화 류 를 파생 시 킬 수 있다.공장 류: 공장 류 에서 초기 조건 에 따라 서로 다른 암호 화 류 의 인 스 턴 스 를 생 성하 고 기본 지침 으로 돌아 갑 니 다.공장 류 는 서로 다른 암호 화 류 에 의존 하고 공장 류 와 같은 종류 가 많 으 면 주로 고객 과 구체 적 인 암호 화 알고리즘 간 의 의존 을 해소한다.코드 는 다음 과 같 습 니 다:
//      
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;
}

공장 방법 모델 은 한 공장 의 기 류 를 정의 하고 구체 적 인 공장 을 파생 시 켜 구체 적 인 제품 을 생산 한다.그 밖 에 개방 - 폐쇄 원칙 에 부합 되 고 새로운 암호 화 알고리즘 을 추가 하 며 암호 화 기능 류 를 쓰 고 파생 공장 류 를 쓰 면 됩 니 다. 공장 류 를 수정 하 는 것 이 아 닙 니 다.이것 이 바로 제 가 공장 방법 모델 에 대한 부분 입 니 다. 아직 너무 요리 가 부족 해서 잘못 이해 할 수 있 습 니 다. 잘못된 점 이 있 으 면 개인 적 으로 제 가 고 쳐 주 십시오.

좋은 웹페이지 즐겨찾기