建造者模式(或生成器模式)定义:
Separate the construction of a complex object from its representation so that the same construction process can create different representations.(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示)
UML类图:
C++代码实例:
#include <iostream>
#include <string>
using namespace std;
class Product {
public:
void Run() { cout << "建造完毕,并且用户已经获得产品指针或对象" << endl; }
};
class ConcreteProduct : public Product {
//产品类不需要抽象
};
class Builder {
public:
virtual void BuildPartA(string& partA) = 0;
virtual void BuildPartB(string& partB) = 0;
virtual void BuildPartC(string& partC) = 0;
virtual Product* GetProduct() = 0;
};
class ConcreteBuilder : public Builder {
public:
ConcreteBuilder() {
if (_pProduct==NULL)
_pProduct = new ConcreteProduct;
}
ConcreteProduct* GetProduct() {
return _pProduct;
}
void BuildPartA(string& partA){ cout << "建造第一步:"<< partA << endl; }
void BuildPartB(string& partB){ cout << "建造第二步:"<< partB << endl; }
void BuildPartC(string& partC){ cout << "建造第三步:"<< partC << endl; }
private:
ConcreteProduct* _pProduct;
};
class Director {
public:
Director(Builder* bld){ _bld = bld; }
Product* ConstructProduct() {
_bld->BuildPartA(string("用户自定义1"));
_bld->BuildPartB(string("用户自定义2"));
_bld->BuildPartC(string("用户自定义3"));
return _bld->GetProduct();
}
private:
Builder* _bld;
};
#include "Builder.h"
int main()
{
Director *pDictor = new Director(new ConcreteBuilder());
Product* pProduct = pDictor->ConstructProduct();
pProduct->Run();
return 0;
}
建造者模式最主要的功能是基本方法的调用顺序安排。
需要区别建造者模式和抽象工厂模式。
Builder 模式和 AbstractFactory 模式在功能上很相似,因为都是用来创建大的复杂的对象,它们的区别是:Builder 模式强调的是一步步创建对象,并通过相同的创建过程可以获得不同的结果对象,一般来说 Builder 模式中对象不是直接返回的。而在AbstractFactory 模式中对象是直接返回的,AbstractFactory 模式强调的是为创建多个相互依赖的对象提供一个同一的接口。
再区别下建造者模式和模板方法模式。