1.builder.h
#include<iostream>
using namespace std;
class Builder {
public:
virtual void buildParta() {}
virtual void buildPartb() {}
virtual void buildPartc() {}
virtual void buildPartd() {}
};
class ProductOne : public Builder {
public:
void buildParta() {
cout << "build part a of ProductOne" << endl;
}
void buildPartb() {
cout << "build part b of ProductOne" << endl;
}
void buildPartc() {
cout << "build part c of ProductOne" << endl;
}
void buildPartd() {
cout << "build part d of ProductOne" << endl;
}
};
class ProductTwo : public Builder {
public:
void buildParta() {
cout << "build part a of ProductTwo" << endl;
}
void buildPartb() {
cout << "build part b of ProductTwo" << endl;
}
void buildPartc() {
cout << "build part c of ProductTwo" << endl;
}
void buildPartd() {
cout << "build part d of ProductTwo" << endl;
}
};
class Director {
private:
Builder* m_Builder;
public:
Director(Builder* builder) {
m_Builder = builder;
}
void create() {
m_Builder->buildParta();
m_Builder->buildPartb();
m_Builder->buildPartc();
m_Builder->buildPartd();
}
};
2.main.cpp
#include"builder.h"
int main() {
ProductOne product;
Director director(&product);
director.create();
return 0;
}
3.定义
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程尅创建不同的表示.建造者模式是一种对象创建型模式.
4.结构
(1)Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方法:一类是buildPartX(), 用于创建复杂对象的各个部件,另一类方法是getResult(), 用于返回复杂对象.
(2)ConcreteBuilder(具体建造者):它实现了Builder接口,实现各个部件的具体构建和装配方法,定义并明确其所创建的复杂对象,也可以提供一个方法返回创建好的复杂对象.
(3)Product产品角色):它是被创建的复杂对象,包含多个组成部件,具体建造者创建该产品的内部表示并定义其装配过程.
(4)Director(指挥者):负责安排复杂对象的创建次序,指挥者和抽象建造者之间存在关联关系,可以在其construct()建造方法中调用创建者对象的部件构造和装配方法,完成复杂对象的建造.
注: 复杂对象指那些包含多个成员变量的对象,这些成员变量也称为部件或零件.
5.典型的复杂对象类
class Product {
private:
string parta;
string partb;
string partc;
string partd;
};
6.适用场景
(1)需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员变量
(2)需要生成的产品对象的属性相互依赖,需要指定其生成顺序
(3)对象的创建过程独立于创建该对象的类.在建造者模式中通过引入指挥者类,将创建过程封装在指挥者类中,而不再建造者类和客户类中.
(4)隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品.