设计模式之建造者模式
建造者模式(Builder Pattern)
定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
常用场景
1. 在项目中创建过程复杂
2. 会被重复使用来创建不同的对象。
优点
1.隔离了构建的步骤和具体的实现,为产品的具体实现提供了灵活度。
2.封装和抽象了每个步骤的实现,实现了依赖倒转原则。
3.封装了具体的步骤,减少了代码的冗余。
缺点
要求构建产品的步骤(算法)是不能剧烈变化的,最好是不变的,这样就影响了灵活度。
C++实现
例子——建造电脑,一共需建造4个部分,主机、显示器、鼠标、键盘。与工厂模式不同,建造者模式是在导向者的控制下一步一步构造产品的。建造电脑就是在控制下一步步构造出来的。创建者模式可以能更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。下面给出建造者模式的UML图。
// 建造者基类
class Builder
{
public:
virtual void BuildHost() {}
virtual void BuildDisplay() {}
virtual void BuildKeyBoard(){}
virtual void BuildMouse() {}
};
// Mac建造
class MacBuilder : public Builder
{
public:
void BuildHost() { cout<<"build Mac Host"<<endl; }
void BuildDisplay() { cout<<"build Mac Display"<<endl; }
void BuildKeyBoard() { cout<<"build Mac KeyBoard"<<endl; }
void BuildMouse() { cout<<"build Mac Mouse"<<endl; }
};
// Dell建造
class DellBuilder : public Builder
{
public:
void BuildHost() { cout<<"build Dell Host"<<endl; }
void BuildDisplay() { cout<<"build Dell Display"<<endl; }
void BuildKeyBoard() { cout<<"build Dell KeyBoard"<<endl; }
void BuildMouse() { cout<<"build Dell Mouse"<<endl; }
};
// 构造的指挥官
class Director
{
private:
Builder *m_pBuilder;
public:
Director(Builder *builder) { m_pBuilder = builder; }
void Build(){
m_pBuilder->BuildHost();
m_pBuilder->BuildDisplay();
m_pBuilder->BuildKeyBoard();
m_pBuilder->BuildMouse();
}
};
int main(void)
{
DellBuilder mac;
Director director1(&mac);
director1.Build();
cout<<endl;
DellBuilder dell;
Director director2(&dell);
director2.Build();
return 0;
}