设计模式-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 }

 

posted @ 2014-10-07 09:59  SoftWare And Hardware  阅读(110)  评论(0编辑  收藏  举报