C++ 디자인 패턴의 팩토리 메소드 패턴에 대한 간략한 소개

黄舟
풀어 주다: 2017-01-18 14:59:58
원래의
1495명이 탐색했습니다.

팩토리 메서드: 객체 생성을 위한 인터페이스를 정의하고 하위 클래스가 어떤 클래스를 인스턴스화하도록 합니다. 팩토리 메서드는 클래스의 하위 클래스 인스턴스화를 지연합니다.

단순 팩토리와의 차이점: 단순 팩토리는 원래 클래스를 수정해야 하므로 열기 및 닫기 원칙을 위반합니다. 팩토리 메소드는 이러한 클래스 문제를 방지합니다. 객체 생성 프로세스를 캡슐화하는 장점을 유지하고 팩토리 클래스만 추가하면 되므로 간단한 팩토리 분기 판단 문제가 해결됩니다.

Factory 메서드 패턴에는 네 가지 역할이 포함됩니다.

Product: abstract product

ConcreteProduct: 구체적인 product

Factory: abstract Factory

ConcreteFactory : 특정 공장

UML 클래스 다이어그램


C++ 디자인 패턴의 팩토리 메소드 패턴에 대한 간략한 소개


여기에서 알아보기 Lei Feng, 예를 들어, 공장 방법 모델을 사용하고 Lei Feng의 방법을 추상 공장에 해당하는 추상 제품으로 간주합니다. Lei Feng에서 배우는 사람들은 이를 구체적인 공장에 해당하는 구체적인 제품으로 간주합니다. 레이펑에게 배우는 사람들의 카테고리를 추가하려면 원래 카테고리를 수정하지 않고 해당 카테고리만 추가하면 됩니다.

테스트 사례:

[code]int main(){
    //工厂方法
    IFactory *factory = new UnderGraduateFactory;  //new一个大学生工厂

    //创建学雷锋的学生
    LeiFeng *student = factory->createLeiFeng();

    //学生干了哪些雷锋方法
    student->BuyRice();  //买米
    student->Sweep(); //扫地
    student->Wash();  //清洗   

    return 0;
}
로그인 후 복사

Lei Feng 클래스(추상적 제품):

[code]class LeiFeng{
public:
    virtual void BuyRice(){
        std::cout << "Buy rice.\n";
    }
    virtual void Sweep(){
        std::cout << "Sweep.\n";
    }
    virtual void Wash(){
        std::cout << "Wash.\n";
    }
};
로그인 후 복사

Lei Feng에서 배우는 사람들(특정 제품):

[code]class UnderGraduate: public LeiFeng{
};
//学雷锋的志愿者(具体产品)
class Volunteer: public LeiFeng{
};
로그인 후 복사

Lei Feng 팩토리 클래스(추상 팩토리):

[code]class IFactory{
public:
    //创建学雷锋对象
    virtual LeiFeng* createLeiFeng(){
        return NULL;
    } 
};
로그인 후 복사

Lei Feng의 객체 팩토리에서 배우기(콘크리트 팩토리):

[code]class UnderGraduateFactory: public IFactory{
    LeiFeng* createLeiFeng(){
        return new UnderGraduate;
    }
};
class VolunteerFactory: public IFactory{
    LeiFeng* createLeiFeng(){
        return new Volunteer;
    }
};
로그인 후 복사

위는 C++ 디자인의 팩토리 메소드 패턴을 간략하게 이해한 내용입니다. 패턴 관련 더 자세한 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿