1.建造者模式简介
建造者模式将一个复杂对象的构造过程与其表现分离,这样,同一个构造过程可用于创建多个不同的表现.
2.源码实现
#include <iostream>
#include <string>
using namespace std;
//产品
class Product
{
public:
    string ProductPartA;
    string ProductPartB;
    string ProductPartC;
    Product(){};
    ~Product(){};
    void setPartAColor(string str)
    {
        ProductPartA = str;
    }
    void setPartBColor(string str)
    {
        ProductPartB = str;
    }
    void setPartCColor(string str)
    {
        ProductPartC = str;
    }
};
/*抽象建造者*/
class Builder
{
public:
    virtual void BuildPartA() = 0;
    virtual void BuildPartB() = 0;
    virtual void BuildPartC() = 0;
    virtual const Product &GetProduct() = 0;
};
/*具体建造者*/
class ConcreteBuilder : public Builder
{
private:
    Product _pro;
public:
    void BuildPartA()
    {
        _pro.setPartAColor("red");
    }
    void BuildPartB()
    {
        _pro.setPartBColor("green");
    }
    void BuildPartC()
    {
        _pro.setPartCColor("black");
    }
    const Product &GetProduct()
    {
        cout << _pro.ProductPartA << endl;
        cout << _pro.ProductPartB << endl;
        cout << _pro.ProductPartC << endl;
        return _pro;
    }
};
/*指挥者*/
class Director
{
private:
    Builder *_bld;
public:
    Director(Builder *bld)
    {
        _bld = bld;
    }
    void Construct()
    {
        _bld->BuildPartA();
        _bld->BuildPartB();
        _bld->BuildPartC();
        _bld->GetProduct();
    }
};
int main()
{
    ConcreteBuilder *build = new ConcreteBuilder();
    Director *director = new Director(build);
    director->Construct();
    delete director;
    delete build;
    return 0;
}
3.编译源码
$ g++ -o example example.cpp
4.运行及其结果
$ ./example
red
green
black












网友评论