Eine kurze Einführung in das Builder-Muster in C++-Entwurfsmustern

黄舟
Freigeben: 2017-01-17 13:39:14
Original
1395 Leute haben es durchsucht

Builder-Muster (Builder): Trennt die Konstruktion eines komplexen Objekts von seiner Darstellung, sodass mit demselben Konstruktionsprozess unterschiedliche Darstellungen erstellt werden können.

Musterimplementierung:

[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;
};
Nach dem Login kopieren

Kunde:

[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;
}
Nach dem Login kopieren

Das Obige ist der Inhalt des C++-Entwurfsmusters, eine kurze Einführung in das Builder-Muster und Weitere verwandte Inhalte Bitte beachten Sie die chinesische PHP-Website (www.php.cn)!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage