大话设计模式C++实现-第13章-建造者模式

2015-01-24 05:42:20 · 作者: · 浏览: 3

一、UML图

\


二、概念

建造者模式(Builder):将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。


三、说明

角色:<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4KPHA+o6gxo6lCdWlsZGVyo7rKx86qtLS9qNK7uPZQcm9kdWN0ttTP87XEuPe49rK/vP7WuLaotcSz6c/zvdO/2qGjPC9wPgo8cD6jqDKjqUNvbmNyZXRlQnVpbGRlcqO6yse+38zltLS9qNXfo6zKtc/WQnVpbGRlcr3Tv9qjrLm51Oy6zdewxeS497j2sr+8/qGjPC9wPgo8cD6jqDOjqVByb2R1Y3Sjur7fzOW1xLL6xre9x8mroaM8L3A+CjxwPqOoNKOpRGlyZWN0b3Kjuta4u9PV36Osy/vKx7m5vajSu7j2yrnTw0J1aWxkZXK907/atcS21M/zoaM8L3A+CjxwPjxzdHJvbmc+UaO6yrLDtMqxuvLKudPDvajU7NXfxKPKvaO/PC9zdHJvbmc+PC9wPgo8cD5Bo7rL/Nb30qrKx9PD09q0tL2o0rvQqbi01NO1xLbUz/OjrNXi0Km21M/zxNqyv7m51Oy85LXEvajU7Muz0PLNqLOjysfOyLaotcSjrLWrttTP88Tasr+1xLm5vajNqLOjw+bB2dfFuLTU07XEseS7r6GjPC9wPgo8cD48c3Ryb25nPlGjusq508O9qNTs1d/Eo8q9tcS6w7Smo788L3N0cm9uZz48L3A+CjxwPkGjur2o1OzV38Sjyr21xLrDtKa+zcrHyrm1w72o1Oy0+sLr0+ux7cq+tPrC67fWwOujrNPJ09q9qNTs1d/S/rLYwcsguMOy+sa3ysfI57rO1+nXsLXEo6zL+dLUyPTQ6NKquMSx5NK7uPay+sa3tcTE2rK/se3KvqOs1rvQ6NKq1Nm2qNLl0ru49r7fzOW1xL2o1OzV377Nv8nS1MHLoaM8L3A+CjxwPjxicj4KPC9wPgo8cD48c3Ryb25nPsvEoaJDJiM0MzsmIzQzO8q1z9Y8L3N0cm9uZz48L3A+CjxwPqOoMaOpQnVpbGRlci5oPC9wPgo8cD48L3A+CjxwcmUgY2xhc3M9"brush:java;">#ifndef BUILDER_H #define BUILDER_H #include #include #include //Product Class,产品类,有多个部件组成。 class Product { private: std::vector parts; public: //添加产品部件 void Add(std::string part) { parts.push_back(part); } //列举所有的产品部件 void Show() { std::cout<<"产品 创建------"< ::iterator it; for(it=parts.begin();it!=parts.end();it++) { std::cout<<*it< Add("部件A"); } void BuildPartB() { product->Add("部件B"); } Product* GetResult() { return product; } }; //ConcreteBuilder2,具体建造者类 class ConcreteBuilder2:public Builder { private: Product* product; public: ConcreteBuilder2() { product=new Product(); } ~ConcreteBuilder2() { delete product; } void BuildPartA() { product->Add("部件X"); } void BuildPartB() { product->Add("部件Y"); } Product* GetResult() { return product; } }; //Director Class,指挥者类。 class Director { public: void Construct(Builder* builder) { builder->BuildPartA(); builder->BuildPartB(); } }; #endif

(2)Client.cpp

#include "Builder.h"
#include 
   
    
#include 
    
      //Client,客户不知道具体的建造过程。 void main() { Director* director=new Director(); Builder* builder1=new ConcreteBuilder1(); Builder* builder2=new ConcreteBuilder2(); std::cout<<"指挥者用ConcreteBuilder1的方法建造产品:"<
     
      Construct(builder1); Product* p1=builder1->GetResult(); p1->Show(); std::cout<
      
       Construct(builder2); Product* p2=builder2->GetResult(); p2->Show(); std::cout<
       
        

(3)运行结果