Charpter13 建造者模式

建造者模式简介

建造者模式(builder),又叫生成器模式,将一个复杂对象的构造与它的表示分离,使得同样的建造过程可以创建不同的表示。

如果我们用了建造者模式,那么用户就只需要指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。

建造者模式主要是为了创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。

建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。

建造者UML类图

 Builder是一个Product对象的各个部件指定的抽象接口。ConcreteBuilder是具体的建造者,实现Builder的接口,构造和装配各个部件。Product当然就是那些具体的个人,产品角色了,Director是构建一个使用Builder接口的对象。

C++代码实现

C++使用指针传递参数,所以忽略了getResult方法。

// Product类
#ifndef _PRODUCT_HPP
#define _PRODUCT_HPP
#include<vector>
#include<iostream>
#include<string>
using namespace std;

class Product{
public:
    void add(string str){
        vec.push_back(str);
    }
    void show(){
        for(auto i : vec){
            cout << i<<endl;
        }
    }

private:
    vector<string> vec;
    
};
#endif
// 抽象的建造者类,提供接口
#ifndef _BUILDER_HPP
#define _BUILDER_HPP
#include"product.hpp"
class Builder{
public:
    virtual void buildPartA() = 0;
    virtual void buildPartB() = 0;
};
#endif 
//ConcreteBuilder类实现具体建造内容
#ifndef _CONCRETEBUILDER_HPP
#define _CONCRETEBUILDRE_HPP
#include"builder.hpp"
#include"product.hpp"
class ConcreteBuilder:public Builder{
public:
    ConcreteBuilder(Product* p):product(p){

    }

    virtual void buildPartA()override{
        product->add("Part A");        
    }
    virtual void buildPartB()override{
        product->add("Part B");
    }

private:
    Product *product;
};
#endif
//Director类,指挥建造的顺序
#ifndef _DIRECTOR_HPP
#define _DIRECTOR_HPP
#include"builder.hpp"

class Director{
public:
    Director(Builder* b){
        b->buildPartA();  //先建造PartA
        b->buildPartB();  //再建造PartB
    }
};

#endif
//客户端代码
#include"builder.hpp"
#include"concretebuilder.hpp"
#include"director.hpp"
int main(){
    Product* p = new Product();
    ConcreteBuilder* conbuilder = new ConcreteBuilder(p);
    Director* d = new Director(conbuilder);
    p->show();
    
    getchar();
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/yb-blogs/p/12545496.html