一、原理讲解
1.1意图
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
1.2应用场景
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时;
- 当构造过程必须允许被构造的对象有不同的表示时;
1.3结构图(UML图)
1.4代码实现步骤
1.4.1产品类
a1 定义一个抽象产品类IProduct,定义两个虚接口函数getName()和show();
a2 定义一个具体产品类Product1,实现两个虚接口函数fun1()和show(),并且定义一个私有变量name,我们的目的是分步骤构建这个name。
1.4.2构建器类
a3 定义一个抽象构建器接口类IBuilder,定义两个接口函数buildPart1()、buildPart2()和一个产品返回接口getProduct()用于子类继承;(抽象类)
a4 定义一个实现具体构建器接口类ConcreteBuilder,重写接口函数buildPart1()、buildPart2()和产品返回接口getProduct();(具体构建器)(细节的表示分离开来【与构建步骤】)
a5 同时定义一个产品指针变量IProduct* product,在buildPart1和buildPart2函数里面用改变量分别构建该产品的名字,然后通过产品返回接口getProduct()返回该变量;
1.4.2导演类(或者称操作者类)
a6 定义一个导演类Director,里面函数construct用表示接口buildPart1()和buildPart2()按照一定逻辑构建具体的产品;
二、实现代码
2.1
本示例假设构建一个产品,该产品的名字构建步骤非常复杂,需要步骤1和步骤2才能完成。
2.2 具体代码
BuilderPattern.cpp
#include <iostream>
#include <string>
using namespace std;
#define DELETE(pointer) delete pointer; pointer=nullptr
class IProduct {
//抽象产品类
public:
virtual string& getName() = 0;
virtual void show() = 0;
};
class Product1