设计模式-1.6建造者模式(生成器模式)
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程创建不同的表示。
与工厂模式不同,建造者模式是在导向者的控制下一步一步构造产品的。创建者模式可以能更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。
对于客户来说,只需知道导向者就可以了,通过导向者,客户就能构造复杂的对象,而不需要知道具体的构造过程。下面给出小人例子的代码实现。
1 class Builder 2 { 3 public: 4 virtual void BuildHead() {} 5 virtual void BuildBody() {} 6 virtual void BuildLeftArm(){} 7 virtual void BuildRightArm() {} 8 virtual void BuildLeftLeg() {} 9 virtual void BuildRightLeg() {} 10 }; 11 //构造瘦人 12 class ThinBuilder : public Builder 13 { 14 public: 15 void BuildHead() { cout<<"build thin body"<<endl; } 16 void BuildBody() { cout<<"build thin head"<<endl; } 17 void BuildLeftArm() { cout<<"build thin leftarm"<<endl; } 18 void BuildRightArm() { cout<<"build thin rightarm"<<endl; } 19 void BuildLeftLeg() { cout<<"build thin leftleg"<<endl; } 20 void BuildRightLeg() { cout<<"build thin rightleg"<<endl; } 21 }; 22 //构造胖人 23 class FatBuilder : public Builder 24 { 25 public: 26 void BuildHead() { cout<<"build fat body"<<endl; } 27 void BuildBody() { cout<<"build fat head"<<endl; } 28 void BuildLeftArm() { cout<<"build fat leftarm"<<endl; } 29 void BuildRightArm() { cout<<"build fat rightarm"<<endl; } 30 void BuildLeftLeg() { cout<<"build fat leftleg"<<endl; } 31 void BuildRightLeg() { cout<<"build fat rightleg"<<endl; } 32 }; 33 //构造的指挥官 34 class Director 35 { 36 private: 37 Builder *m_pBuilder; 38 public: 39 Director(Builder *builder) { m_pBuilder = builder; } 40 void Create(){ 41 m_pBuilder->BuildHead(); 42 m_pBuilder->BuildBody(); 43 m_pBuilder->BuildLeftArm(); 44 m_pBuilder->BuildRightArm(); 45 m_pBuilder->BuildLeftLeg(); 46 m_pBuilder->BuildRightLeg(); 47 } 48 };
客户端:
1 int main() 2 { 3 FatBuilder thin; 4 Director director(&thin); 5 director.Create(); 6 return 0; 7 }