软件设计模式 —— 建造者模式

来源:互联网 发布:python外星人入侵图片 编辑:程序博客网 时间:2024/05/17 22:05

  建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(DP)。《大话设计模式》举了一个很好的例子——建造小人,一共需建造6个部分,头部、身体、左右手、左右脚。与工厂模式不同,建造者模式是在导向者的控制下一步一步构造产品的。建造小人就是在控制下一步步构造出来的



//P; 设计方式: 函数的形参用父类,实际传去具体子类#include   <iostream>   using  namespace  std;class Builder    {  public:  virtual void BuildHead() {}  virtual void BuildBody() {}  virtual void BuildLeftArm(){}  virtual void BuildRightArm() {}  virtual void BuildLeftLeg() {}  virtual void BuildRightLeg() {}  };  //构造瘦人  class ThinBuilder : public Builder  {  public:  void BuildHead() { cout<<"build thin body"<<endl; }  void BuildBody() { cout<<"build thin head"<<endl; }  void BuildLeftArm() { cout<<"build thin leftarm"<<endl; }  void BuildRightArm() { cout<<"build thin rightarm"<<endl; }  void BuildLeftLeg() { cout<<"build thin leftleg"<<endl; }  void BuildRightLeg() { cout<<"build thin rightleg"<<endl; }  };  //构造胖人  class FatBuilder : public Builder  {  public:  void BuildHead() { cout<<"build fat body"<<endl; }  void BuildBody() { cout<<"build fat head"<<endl; }  void BuildLeftArm() { cout<<"build fat leftarm"<<endl; }  void BuildRightArm() { cout<<"build fat rightarm"<<endl; }  void BuildLeftLeg() { cout<<"build fat leftleg"<<endl; }  void BuildRightLeg() { cout<<"build fat rightleg"<<endl; }  };  //构造的指挥官  class Director    {  private:  Builder *m_pBuilder;  public:  Director(Builder *builder) { m_pBuilder = builder; }  void Create(){  m_pBuilder->BuildHead();  m_pBuilder->BuildBody();  m_pBuilder->BuildLeftArm();  m_pBuilder->BuildRightArm();  m_pBuilder->BuildLeftLeg();  m_pBuilder->BuildRightLeg();  }  };  int main()  {  FatBuilder fater;  Director director(&fater);  director.Create();  return 0;  }  





建造者模式与工厂模式的区别:

             工厂模式一般都是创建一个产品,注重的是把这个产品创建出来就行,只要创建出来,不关心这 产品的组成部分。从代码上看,工厂模式就是一个方法,用这个方法就能生产出产品。

             建造者模式也是创建一个产品,但是不仅要把这个产品创建出来,还要关系这个产品的组成细节,组成过程。从代码上看,建造者模式在建造产品时,这个产品有很多方法,建造者模式会根据这些相同          方法但是不同执行顺序建造出不同组成细节的产品。


工厂模式注重的对象创建的结果,而创建者模式注重的对象创建的过程。



0 0