声明:本博文篇幅短,适合快速回顾、朝花夕拾,不适合入门详解。
一、概念
将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
二、模式结构图
三、例子
class Food
{
private:
PartA * _a;
PartB * _b;
public:
void setPartA(const PartA * p);
void setPartB(const PartB * p);
};
class FoodBuilder
{
public:
virtual ~Builder();
virtual void BuilderPartA() = 0;
virtual void BuilderPartB() = 0;
virtual Food getFood() = 0;
protected:
Builder();
};
class ConcreteFoodBuilder : public FoodBuilder
{
private:
Food * _food;
public:
void BuilderPartA()
{
_food->setPartA(new PartA());
}
void BuilderPartB()
{
_food->setPartB(new PartB());
}
Food * getFood()
{
BuilderPartA();
BuilderPartB();
return _food;
}
};
class CashierDirector
{
public:
CashierDirector(FoodBuilder * fb)
{
_fb = fb;
}
void construct()
{
_fb->BuilderPartA();
_fb->BuilderPartB();
}
private:
FoodBuilder * _fb;
};
void main()
{
FoodBuilder * foodB = new ConcreteFoodBuilder();
CashierDirector * cd = new CashierDirector(foodB);
cd->construct();
Food * fd = foodB->getFood();
}
四、优缺点
1、优点
a、Builder模式的封装性好,易扩展
b、解耦了组装过程和创建具体部件,使得我们不用去关心每个部件是如何组装的
2、缺点
a、对于分步骤构建的算法需求的变化难以应付
b、当增加新的产品的一个细节需要修改Builder,违背了“开闭原则”。