C++ 디자인 패턴의 빌더 패턴에 대한 간략한 소개

黄舟
풀어 주다: 2017-01-17 13:39:14
원래의
1395명이 탐색했습니다.

빌더 패턴(Builder): 복잡한 객체의 구성과 표현을 분리하여 동일한 구성 프로세스가 다른 표현을 만들 수 있습니다.

패턴 구현:

[code]class Builder;
//产品
class Product{
public:
    void AddPart(const char *info){
        m_PartInfoVec.push_back(info);
    }
    void ShowProduct(){
        for(std::vector<const char *>::iterator item = m_PartInfoVec.begin(); item != m_PartInfoVec.end(); ++item){
            std::cout << *item << std::endl;
        }
    }
private:
    std::vector<const char *> m_PartInfoVec;
};

//Builder建造者,统一抽象接口
class Builder{
public:
    virtual void BuildPartA(){}
    virtual void BuildPartB(){}
    virtual Product* GetProduct() { return NULL;}
};

//具体的被创建对象方法
class ConcreteBuilder:public Builder{
public:
    ConcreteBuilder(){ m_Product = new Product(); }
    void BuildPartA(){
        m_Product->AddPart("PartA completed");
    }
    void BuildPartB(){
        m_Product->AddPart("PartB q");
    }
    Product* GetProduct(){
        return m_Product;
    }
private:
    Product *m_Product;
};

//Director控制具体建造对象的创建
class Director{
public:
    Director(Builder *builder) { m_Builder = builder; }
    void CreateProduct(){
        m_Builder->BuildPartA();
        m_Builder->BuildPartB();
    }
private:
    Builder *m_Builder;
};
로그인 후 복사

클라이언트:

[code]int main(){
    Builder *builderObj =  new ConcreteBuilder();

    Director directorObj(builderObj);
    directorObj.CreateProduct();

    Product *productObj = builderObj->GetProduct();

    if(productObj == NULL)
    {
        return 0;
    }
    productObj->ShowProduct();

    delete productObj;
    productObj = NULL;
    delete builderObj;
    builderObj = NULL;
}
로그인 후 복사

위 내용은 빌더 패턴에 대한 간략한 소개 내용입니다. PHP 중국어 넷(www.php.cn)을 주목해주세요!

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