建造者模式(Builder Pattern)使用多个简单的对象创建一个复杂的对象,用于将一个复杂的构建与其表示分离,使得同样的构建过程可以创建不同的表示,然后通过一个Builder类创建最终对象
建筑者模式主要用于解决软件系统中复杂对象的创建问题。
建筑者模式能将各部分算法包装起来,在需求变化后只需要调整各个算法的组合方式和顺序,能极大提高系统稳定性。建造者模式常被用于一些基本部件不会变而其组合经常变换的场景。
建筑者设计一般情况:
- Builder :创建一个复杂产品对象的抽象接口
- ConcreteBuilder:Builder 接口的实现类,用于定义复杂产品各个部件的装配流程。
- Director:构造一个使用Builder接口的对象
- Product:表示被构造的复杂对象。ConcreteBuilder 定义了该复杂对象的装配流程,而Product顶一个该复杂对象的结构和内部表示。
以生产一个电脑为例,Product(电脑 Computer)电脑生产包括(CPU、Memory、Disk、etc)
// 定义生产产品电脑 Computer (Product)
class Computer {
private:
string cpu;
string memory;
string disk;
}
// 定义抽象接口 (ConcreteBuilder)
class ComputerBuilder {
public:
virtual void buildcpu();
virtual void buildmemory();
virtual void buildDisk();
virtual Computer buildComputer();
}
// 实现接口类
class ComputerConcreteBuilder:public ComputerBuilder{
public:
Computer computer;
void buildcpu() {
cout << "build cpu" << endl;
}
void buildmemory() {
cout << " build buildmemory" << endl;
}
void buildDisk() {
cout << " build Disk" << endl;
}
Computer buildComputer() {
return computer;
}
};
// 定义使用Builder接口实现产品的装配 (Director)
class ComputerDirector {
public:
Computer constructComputer( ComputerBuilder computerBuilder) {
computerBuilder.buildmemory();
computerBuilder.buildcpi();
computerBuilder.buildDisk();
return computerBuilder.buildComputer();
}
}
筑造者模式对产品生产过程的封装,在需要发生变化,只需要调换函数顺序即可,其他都稳定不变。