C++设计模式之-建造者模式

建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(DP)。《大话设计模式》举了一个很好的例子——建造小人,一共需建造6个部分,头部、身体、左右手、左右脚。与工厂模式不同,建造者模式是在导向者的控制下一步一步构造产品的。建造小人就是在控制下一步步构造出来的。创建者模式可以能更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。

代码如下:

 1 // Director.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <iostream>
 6 #include <string>
 7 using namespace std;
 8 
 9 class Builder  
10 
11 {
12 
13 public:
14     virtual void BuildHead() {}
15     virtual void BuildBody() {}
16     virtual void BuildLeftArm(){}
17     virtual void BuildRightArm() {}
18     virtual void BuildLeftLeg() {}
19     virtual void BuildRightLeg() {}
20 };
21 
22 //构造瘦人
23 
24 class ThinBuilder : public Builder
25 {
26 public:
27     void BuildHead() { cout<<"build thin body"<<endl; }
28     void BuildBody() { cout<<"build thin head"<<endl; }
29     void BuildLeftArm() { cout<<"build thin leftarm"<<endl; }
30     void BuildRightArm() { cout<<"build thin rightarm"<<endl; }
31     void BuildLeftLeg() { cout<<"build thin leftleg"<<endl; }
32     void BuildRightLeg() { cout<<"build thin rightleg"<<endl; }
33 
34 };
35 
36 //构造胖人
37 class FatBuilder : public Builder
38 {
39 public:
40     void BuildHead() { cout<<"build fat body"<<endl; }
41     void BuildBody() { cout<<"build fat head"<<endl; }
42     void BuildLeftArm() { cout<<"build fat leftarm"<<endl; }
43     void BuildRightArm() { cout<<"build fat rightarm"<<endl; }
44     void BuildLeftLeg() { cout<<"build fat leftleg"<<endl; }
45     void BuildRightLeg() { cout<<"build fat rightleg"<<endl; }
46 };
47 
48 //构造的指挥官
49 class Director  
50 {
51 private:
52     Builder *m_pBuilder;
53 public:
54     Director(Builder *builder) { m_pBuilder = builder; }
55     void Create(){
56         m_pBuilder->BuildHead();
57         m_pBuilder->BuildBody();
58         m_pBuilder->BuildLeftArm();
59         m_pBuilder->BuildRightArm();
60         m_pBuilder->BuildLeftLeg();
61         m_pBuilder->BuildRightLeg();
62     }
63 };
64 int _tmain(int argc, _TCHAR* argv[])
65 {
66     FatBuilder *thin = new FatBuilder();
67     Director *director = new Director(thin);
68     director->Create();
69     system("pause");    
70     return 0;
71 }

 

posted @ 2018-07-09 20:01  wxmwanggood  阅读(785)  评论(0编辑  收藏  举报