建造者模式

来源:互联网 发布:淘宝加盟诈骗案进展 编辑:程序博客网 时间:2024/05/29 12:32

这里写图片描述

Builder 模式和 AbstractFactory 模式在功能上很相似,因为都是用来创建大的复杂的对
象,它们的区别是: Builder 模式强调的是一步步创建对象,并通过相同的创建过程可以获得不同的结果对象,一般来说 Builder 模式中对象不是直接返回的。而在 AbstractFactory 模式中对象是直接返回的, AbstractFactory 模式强调的是为创建多个相互依赖的对象提供一个同一的接口。

#include <iostream>#include <string>using namespace std;class Product{public:    Product()    {        ProducePart();        cout <<"return a product"<< endl;    }    void ProducePart()    {        cout <<"build part of product.."<< endl;    }    ~Product(){}};class ProductPart{public:    ProductPart(){ cout << "build productpart..."<< endl;}    ProductPart *BuildPart()    {        return new ProductPart;    }    ~ProductPart(){}};/*****************************************************/class Builder{public:    virtual ~Builder(){}    virtual void BuildPartA(const string &buildPara)=0;    virtual void BuildPartB(const string &buildPara)=0;    virtual void BuildPartC(const string &buildPara)=0;    virtual Product *GetProduct() =0;protected:    Builder(){}};class ConcreateBuilder: public Builder{public:    ConcreateBuilder(){}    ~ConcreateBuilder(){}    virtual void BuildPartA(const string &buildPara)    {        cout << "Step1:Build PartA..."<< buildPara << endl;    }    virtual void BuildPartB(const string &buildPara)    {        cout << "Step1:Build PartB..."<< buildPara << endl;    }    virtual void BuildPartC(const string &buildPara)    {       cout << "Step1:Build PartC..."<< buildPara << endl;    }    virtual Product *GetProduct()    {        BuildPartA("pre-defined");        BuildPartB("pre-defined");        BuildPartC("pre-defined");        return new Product();//产品完成    }};/***************************************************/class Director{public:    Director(Builder* bld){ _bld = bld;}    ~Director(){}    void Construct()    {        _bld->BuildPartA("user-defined");        _bld->BuildPartB("user-defined");        _bld->BuildPartC("user-defined");    }private:    Builder *_bld;};int  main(){    Director *d = new Director(new ConcreateBuilder());    d->Construct();    return 0;}

这里写图片描述

0 0
原创粉丝点击