简介
建造者模式:
将一个复杂对象的构建和他的表示分离,使得相同的构造过程可以创建不同的表示。
重点:相同的构造过程产生不同的表示。
构成
Product产品类,通过模板方法模式实现,有基本方法和模板方法
Builder抽象建造者,规范产品的组件,一般由子类实现
ConcreteBuilder具体建造者,实现抽象类定义的所有方法,并返回一个创建好的对象
Director导演类,负责安排已有模块的顺序,然后告诉建造者开始建造
常用的场景
相同方法,不同顺序
多个部件可以组装,但是产生的结果不同时
产品类非常复杂或者调用顺序不同,产生的功能不同
对象创建过程中会使用到的系统中的其他对象时,这些对象在产品对象的创建过程不易得到时,可以采用建造者模式疯长该对象的创建过程。这是一个补偿方法。
优点
封装性
建造者独立,容易扩展–》就是这个所谓不同的顺序的具体描述了
便于控制细节风险,细节问题封装在建造者中,所以互不影响
区别
建造者模式关注的是零件类型和装配工艺(顺序)这是他和工厂模式最大的不同。
模板方法侧重子类控制父类
测试代码
#include <iostream>
#include <assert.h>
using namespace std;
//产品
class FProduct
{
public:
void add(char data){};
};
//虚拟生产者
class FBaseBuilder
{
public:
virtual void addA(){};
virtual void addB(){};
virtual void addC(){};
};
//具体生产者
class FBuilderA : public FBaseBuilder
{
public:
void addA(){};
void addB(){};
void addC(){};
};
class FBuilderB : public FBaseBuilder
{
public:
void addA(){};
void addB(){};
void addC(){};
};
//指挥者
class FBuilderDirector
{
public:
void create( FBaseBuilder* builder )
{
builder->addA();
builder->addB();
builder->addC();
}
};
void main()
{
FBuilderDirector bulderDirector;
FBuilderB b;
FBuilderA a;
bulderDirector.create(&a);
bulderDirector.create(&b);
}