建造者模式
使用场景:通常由几个部分(方法)组成,需求变化,但是这几个方法是不变的。网友给出了一个很好的例子——造小人:共六个部分,头部、身体、左右手、左右脚。不管需求怎么变化(胖小人和瘦小人),造小人就是这几个部分。建造者就是控制这一步步构造出产品的。
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 fat; Director director(&fat); director.Create(); //造瘦小人 //ThinBuilder thin; //Director director(&thin); //director.Create(); return 0; }