一、首先看建造者模式的UML图:
二、再来看一个建造者模式的例子
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(); } };
三、建造者模式和工厂模式的联系
联系前面的工厂模式,可以发现建造者模式只比工厂模式多了一个“导演类”的角色。如果把导演类看做客户端,就可以看做一个简单的工厂模式了。
与工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更为复杂,因此将对象的创建过程独立出来组成一个新的类——导演类。也就是说,工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类向客户端提供最终的产品;而建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给导演类。由导演类负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端。
建造者模式与工厂模式类似,他们都是建造者模式,适用的场景也很相似。一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式。
参考:
http://blog.csdn.net/hguisu/article/details/7518060
http://blog.csdn.net/wuzhekai1985/article/details/6667467
时间: 2024-11-09 21:39:35