建造者模式C++实现
1定义
将一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创造不同的表示
注:在模板方法中,实现了父类调用子类方法的功能,且,通过钩子实现了方法的选择性调用。但是其中整体的顺序固定的,先做什么再做什么,不用做的通过钩子屏蔽。
而创造者模式就是对这个固定顺序进行调整使得其更好工作的一个模式。
2类图
角色分工:
Product产品类,通过模板方法模式实现,有基本方法和模板方法
Builder抽象建造者,规范产品的组件,一般由子类实现
ConcreteBuilder具体建造者,实现抽象类定义的所有方法,并返回一个创建好的对象
Director导演类,负责安排已有模块的顺序,然后告诉建造者开始建造
3实现
class Product
{
public:
Product();
~Product();
private:
string ProductPartA;
string ProductPartB;
string ProductPartC;
};
class Builder
{
public:
virtual ~Builder();
virtual void BuildPartA()=0;
virtual void BuildPartB()=0;
virtual void BuildPartC()=0;
virtual Product* GetProduct() = 0;
protected:
Builder();
private:
Product* _pro;
};
class ConcreteBuilder:public Builder
{
public:
ConcreteBuilder();
~ConcreteBuilder();
void BuildPartA();
void BuildPartB();
void BuildPartC();
Product* GetProduct();
};
class Director
{
public:
Director(Builder* bld);
~Director();
void Construct()
{
_bld->BuildPartA();
_bld->BuildPartB();
_bld->BuildPartC();
_bld->GetProduct();
}
protected:
private:
Builder* _bld;
};
3应用
①优点
封装性
建造者独立,容易扩展--》就是这个所谓不同的顺序的具体描述了
便于控制细节风险,细节问题封装在建造者中,所以互不影响
②使用场景
相同方法,不同顺序
多个部件可以组装,但是产生的结果不同时
产品类非常复杂或者调用顺序不同,产生的功能不同
对象创建过程中会使用到的系统中的其他对象时,这些对象在产品对象的创建过程不易得到时,可以采用建造者模式疯长该对象的创建过程。这是一个补偿方法。
③注意事项
建造者模式关注的是零件类型和装配工艺(顺序),这是他和工厂模式最大的不同。模板方法侧重子类控制父类
4扩展
在建造者模式中使用模板方法。就是前面已经用过的
建造者模式最主要的功能是基本方法的调用顺序安排,组装已有零件;而工厂模式则是造轮子。