Builer模式
:将构造复杂对象的过程和组成对象的部件解耦。
组成:
1.抽象建造者角色
2.具体建造者角色
3.指导角色
4.产品角色
// 抽象建造者角色,它规范了所有媒体建造的步骤:
class AbstractBuiler{
private:
public:
AbstractBuiler(){};
virtual ~AbstractBuiler(){};

virtual void BuildPartA() = 0;
virtual void BuildPartB() = 0;
};
// Builder的派生类,实现BuilderPartA和BuilderPartB接口函数
class ConcteateBuiler:public AbstractBuiler{
ConcteateBuiler(){};
~ConcteateBuiler(){};

void BuildPartA()
{cout<<"ConcreateBuiler partA"<<endl;}
void buildPartB()
{cout<<"ConcteateBuilder partB"<<endl;}
};

class Director{
private:
Builder *m_pBuilder;
public:
Director(Builer *pBuilder)
: m_pBuilder(pBuilder)
{
}
~Director()
{
  if (NULL != m_pBuilder)
{
  delete m_pBuilder;
 m_pBuiler = NULL;
}
}

void Construct(){
  m_pBuiler->BuildPartA();
 m_pBuiler->BuildPartB();
}
};
// Builder的派生类,实现BuilderPartA和BuilderPartB接口函数
class ConcreateBuilder2
 : public AbstractBuiler
{
public:
 ConcreateBuilder2(){}
 virtual ~ConcreateBuilder2(){}

 virtual void BuilderPartA();
 virtual void BuilderPartB();
};

void main()
{
AbstractBuiler *abstractBuiler = new ConcreateBuilder2();
Director *director = new Director(abstractBuiler);
dirctor->Construct();
}
   建造模式可以使得产品内部的表象独立变化。在原来的工厂方法模式中,产品内部的表
象是由产品自身来决定的;而在建造模式中则是“外部化”为由建造者来负责。这样定义一个
新的具体建造者角色就可以改变产品的内部表象,符合“开闭原则”。
建造模式使得客户不需要知道太多产品内部的细节。它将复杂对象的组建和表示方式封
装在一个具体的建造角色中,而且由指导者来协调建造者角色来得到具体的产品实例。
每一个具体建造者角色是毫无关系的。
   建造模式可以对复杂产品的创建进行更加精细的控制。产品的组成是由指导者角色调用
具体建造者角色来逐步完成的,所以比起其它创建型模式能更好的反映产品的构造过程。
  建造模式在得到复杂产品的时候可能要引用多个不同的组件,在这一点上来看,建造模
式和抽象工厂模式是相似的。可以从以下两点来区分两者:创建模式着重于逐步将组件装配
成一个成品并向外提供成品,而抽象工厂模式着重于得到产品族中相关的多个产品对象;抽
象工厂模式的应用是受限于产品族的(具体参见《深入浅出工厂模式》),建造模式则不会。

posted on 2011-12-24 01:22 柳清风 阅读(130) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


统计