一: 概述
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
通俗点说:
二 演化过程
方法1: 要保证一个类仅由一个实例,可以在调用处判断类对象是否为空, 如果空就创建对象,否则就不创建。
三: 模式解读
1 类图
1 类图
2 要点
参与者:
- Builder 为创建一个Product对象的各个部件提供抽象接口
- ConcreteBuilder
实现Builder提供的接口 - Director 构造一个使用Builder接口的对象
- Product 表示被构造的复杂对象
3 模式代码实现
#include <iostream>
using namespace std;
//Builder 定义创建Product对象各组件的接口
class PersonBuilder
{
public:
//PersonBuilder(); //不注释掉,无法运行
virtual void DrawHead()=0;
virtual void DrawBody()=0;
virtual void DrawArm()=0;
virtual void DrawLeg()=0;
};
//ConcreteBuilder实现接口
class PersonThinBuilder:public PersonBuilder
{
public:
void DrawHead(){ cout <<"画瘦人头"<<endl; }
void DrawBody(){cout <<"画瘦人身体"<<endl; }
void DrawArm(){cout <<"画瘦人胳膊"<<endl; }
void DrawLeg(){cout <<"画瘦人腿"<<endl; }
};
//Director使用Builder对象来创建Product
class PersonDirector
{
private:
PersonBuilder *pb;
public:
PersonDirector(PersonBuilder *person)
{
this->pb = person;
}
void CreatePerson()
{
pb->DrawHead();
pb->DrawBody();
pb->DrawArm();
pb->DrawLeg();
}
};
int main()
{
PersonBuilder *pb = new PersonThinBuilder();
PersonDirector *pd = new PersonDirector(pb);
pd->CreatePerson();
}
四: 模式总结
优点
缺点
优点
缺点
应用实例
重构中的应用
相关模式 (区别联系)
来源:https://www.cnblogs.com/controlfate/p/3419575.html