设计模式--建造者模式Builder(创建型)
2016-12-28 10:40
459 查看
一、首先看建造者模式的UML图:
二、再来看一个建造者模式的例子
int main()
{
FatBuilder thin;
Director director(&thin);
director.Create();
return 0;
}
三、建造者模式和工厂模式的联系
联系前面的工厂模式,可以发现建造者模式只比工厂模式多了一个“导演类”的角色。如果把导演类看做客户端,就可以看做一个简单的工厂模式了。
与工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更为复杂,因此将对象的创建过程独立出来组成一个新的类——导演类。也就是说,工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类向客户端提供最终的产品;而建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给导演类。由导演类负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端。
建造者模式与工厂模式类似,他们都是建造者模式,适用的场景也很相似。一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式。
参考:
http://blog.csdn.net/hguisu/article/details/7518060
http://blog.csdn.net/wuzhekai1985/article/details/6667467
二、再来看一个建造者模式的例子
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 thin;
Director director(&thin);
director.Create();
return 0;
}
三、建造者模式和工厂模式的联系
联系前面的工厂模式,可以发现建造者模式只比工厂模式多了一个“导演类”的角色。如果把导演类看做客户端,就可以看做一个简单的工厂模式了。
与工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更为复杂,因此将对象的创建过程独立出来组成一个新的类——导演类。也就是说,工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类向客户端提供最终的产品;而建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给导演类。由导演类负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端。
建造者模式与工厂模式类似,他们都是建造者模式,适用的场景也很相似。一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式。
参考:
http://blog.csdn.net/hguisu/article/details/7518060
http://blog.csdn.net/wuzhekai1985/article/details/6667467
相关文章推荐
- 设计模式---建造者模式Builder(创建型)
- 设计模式(三)建造者模式Builder(创建型)
- 设计模式(2)-创建型-建造者模式(Builder)
- C#设计模式之四建造者模式(Builder Pattern)【创建型】
- 六.创建型设计模式——Builder Pattern(建造者模式)
- 23种设计模式(4)_创建型_建造者模式(Builder Pattern)
- 设计模式(2)-创建型-建造者模式(Builder)
- C#设计模式之四建造者模式(Builder Pattern)【创建型】
- 【设计模式】创建型模式——建造者模式(Builder Pattern)
- 设计模式——创建型之使用建造者模式(Builder Pattern)灵活自由创建你的对象(一)
- Java经典设计模式-创建型模式-建造者模式(Builder)
- 设计模式(三)建造者模式Builder(创建型)
- 设计模式(三)建造者模式Builder(创建型)
- 设计模式(三)建造者模式Builder(创建型)
- 设计模式(三)建造者模式Builder(创建型)
- 设计模式-创建型模式#建造者模式Builder
- 设计模式之------创建型模式(四)-----建造者模式(Builder)
- 【设计模式学习笔记六】【创建型模式】【建造者模式(Builder)】
- 设计模式学习之建造者模式(Builder,创建型模式)(6)
- 设计模式(2)-创建型-建造者模式(Builder)