个人感觉这个模式,使用的应该较少,主要应用于流程性的东西,创建者负责构建一个对象的各个部分,并且完成组装的过程,可以这么理解,创建者模式类似与一个步骤基本固定,但是每个步骤的具体形式却又可以变化的这类对象的创建。废话不多说了,进入我们的创建者模式。
意图:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
适用性:
1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
2、当构造过程必须允许被构造的对象有不同的表示时
使用创建者模式的基本方法:
1、需要抽象出一个基类,所有的对象创建时,都继承自这个基类创建。
2、需要创建一个调用的导演,由它来多态到不同的表现。(它并不继承自那个抽象基类,而是存储一个抽象基类的指针,类似多态)。
3、各个具体对象实例化基类的接口
看一个创建者模式的基本结构例子,本例子从http://www.cppblog.com/converse/archive/2006/07/21/10305.html,整理,仅供学习使用:
builder.h
//设计模式之builder模式
/*
作用:将一个复杂对象的构建与它的表示分离,使同样的构建过程创建不同的表示
*/
//虚拟基类,所有builder的基类,提供不同部分的构建接口
class builder
{
public:
builder(){};
virtual ~builder(){};
//提供构建接口
virtual void builderA() = 0;
virtual void builderB() = 0;
};
//使用builder构建产品,构建产品的过程都一致,但是不同的builder会有不同的表现
//这个不同的实现通过不同的builder派生类来实现,存有一个builder的指针,多态调用
class director
{//
public:
director(builder *pbuilder);
virtual ~director();
void construct();
private:
builder *pBuilder;
};
//具体实例化各个建造者
class concretebuilder1:public builder
{
public:
concretebuilder1(){}
virtual ~concretebuilder1(){}
virtual void builderA();
virtual void builderB();
};
//具体实例化各个建造者
class concretebuilder2:public builder
{
public:
concretebuilder2(){}
virtual ~concretebuilder2(){}
virtual void builderA();
virtual void builderB();
};
<