c++建造者模式

2021-03-03  本文已影响0人  一路向后

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
上一篇 下一篇

猜你喜欢

热点阅读