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 }