《建造者模式》

今天学习了建造者模式,目前较为复杂的一个模式之一。但是思考起来就觉得她很像抽象工厂的生产者模式。

 

但是比生产者多了一个导演着的身份,这个指挥着建造者去生产谁。。。

 

所以,这个模式还是挺有意思的。直接上UML图。

 

我们生产两种商品,两种商品是有厂家决定,商品只决定具有哪些。因此,这时候是有生产者说了算。

 

但是还有一个更高级的指挥者,那就是 导演类。安排生产。

 

好了直接上代码,大家自己看吧

 

 

[cpp]  view plain copy
  1. // Builder.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3. //************************************************************************/      
  4. /* @filename    Builder.cpp 
  5. @author       wallwind   
  6. @createtime    2012/10/23 23:35 
  7. @function     建造者模式 
  8. @email       wochenglin@qq.com   
  9. */      
  10. /************************************************************************/     
  11.   
  12. #include "stdafx.h"  
  13. #include <iostream>  
  14. #include <vector>  
  15. #include<string>  
  16.   
  17. using namespace std;  
  18.   
  19. class Product  
  20. {  
  21. public:  
  22.     Product()  
  23.     {  
  24.         m_part = new vector<string>;  
  25.     }  
  26.     virtual ~Product()  
  27.     {  
  28.         if (m_part)  
  29.         {  
  30.             delete m_part;  
  31.         }  
  32.     }  
  33.   
  34.     void addPart(string part)  
  35.     {  
  36.         m_part->push_back(part);  
  37.     }  
  38.   
  39.     void showPro()  
  40.     {  
  41.         vector<string>::iterator it = m_part->begin();  
  42.         for(;it!=m_part->end();it++)  
  43.             cout<<*it<<endl;  
  44.     }  
  45. private:  
  46.     vector<string> *m_part;  
  47.   
  48. };  
  49.   
  50. class Builder  
  51. {  
  52. public:  
  53.     Builder(){}  
  54.     virtual ~Builder(){}  
  55.   
  56.     virtual void BuildPartA(){}  
  57.     virtual void BuildPartB(){}  
  58.   
  59.     virtual Product* getProduct() const  
  60.     {  
  61.         return NULL;  
  62.     }  
  63.       
  64.   
  65. };  
  66.   
  67.   
  68. class ConcreteBuider1 : public Builder  
  69. {  
  70. public:  
  71.     ConcreteBuider1(){}  
  72.     virtual ~ConcreteBuider1(){}  
  73.     virtual void BuildPartA()  
  74.     {  
  75.         m_product->addPart("ConcreteBuider1:BuildPartA");  
  76.     }  
  77.   
  78.     virtual void BuildPartB()  
  79.     {  
  80.         m_product->addPart("ConcreteBuider1:BuildPartB");  
  81.     }  
  82.   
  83.     virtual Product* getProduct() const  
  84.     {  
  85.         return m_product;  
  86.     }  
  87.   
  88. private :  
  89.     Product * m_product;  
  90. };  
  91.   
  92.   
  93.   
  94. class ConcreteBuider2: public Builder  
  95. {  
  96. public:  
  97.     ConcreteBuider2(){}  
  98.     virtual ~ConcreteBuider2(){}  
  99.     virtual void BuildPartA()  
  100.     {  
  101.         m_product->addPart("ConcreteBuider2:BuildPartA");  
  102.     }  
  103.   
  104.     virtual void BuildPartB()  
  105.     {  
  106.         m_product->addPart("ConcreteBuider2:BuildPartB");  
  107.     }  
  108.   
  109.     virtual Product* getProduct() const  
  110.     {  
  111.         return m_product;  
  112.     }  
  113.   
  114. private :  
  115.     Product * m_product;  
  116. };  
  117.   
  118. class Director  
  119. {  
  120. public:  
  121.     Director(){}  
  122.     ~Director(){}  
  123.   
  124.     void CreateProduct(Builder *build)  
  125.     {  
  126.         build->BuildPartA();  
  127.         build->BuildPartB();  
  128.     }  
  129.   
  130. };  
  131. int _tmain(int argc, _TCHAR* argv[])  
  132. {  
  133.   
  134.     Builder *build1 =new ConcreteBuider1();  
  135.     Director director;  
  136.   
  137.     director.CreateProduct(build1);  
  138.   
  139.     Product* product1=build1->getProduct();  
  140.     product1->showPro();  
  141.   
  142.     Builder *build2 =new ConcreteBuider2();  
  143.     director.CreateProduct(build2);  
  144.   
  145.     Product* product2=build2->getProduct();  
  146.     product2->showPro();  
  147.       
  148.     return 0;  
  149. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值