大话设计模式-建造者模式


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

 1 // builder.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <iostream>
 6 #include <list>
 7 #include <string>
 8 using namespace std;
 9 
10 class Hamburger{
11 
12 private:
13     list<string> strList ;
14 public:
15     void addPart(string part){
16         strList.push_back(part);
17     }
18     void show(){
19         list<string>::iterator listit;
20         for(listit=strList.begin();listit!=strList.end();listit++){
21             cout << *listit << endl;
22         }
23     }
24 };
25 
26 class HamBulider{
27 
28 public:
29     virtual void bulidPartA()=0;
30     virtual void bulidPartB()=0;
31     virtual void bulidPartC()=0;
32     virtual Hamburger *getProduce()=0;
33 };
34 class ConcreteHamBulider:public HamBulider{
35 
36 private :
37     Hamburger *h;
38     string a;//麻辣
39     string b;//
40     string c;//不辣
41 public:
42     ConcreteHamBulider(string a,string b,string c){
43         this->a = a;
44         this->b = b;
45         this->c = c;
46         h = new Hamburger();
47     }
48     void bulidPartA(){
49         cout << "面包"<<a<<endl;
50     }
51     void bulidPartB(){
52         cout << "鸡肉"<<b<<endl;
53     }
54     void bulidPartC(){
55         cout << "面包"<<c<<endl;
56     }
57     Hamburger *getProduce(){
58         return h;
59     }
60 
61 };
62 
63 class Director{
64 public:
65     void Construct(HamBulider *hb){
66         hb->bulidPartA();
67         hb->bulidPartB();
68         hb->bulidPartC();
69     }
70 };
71 int _tmain(int argc, _TCHAR* argv[])
72 {
73     HamBulider *cHamBulider1 = new ConcreteHamBulider("不辣","不辣","不辣");
74     Director *d = new Director();
75     d->Construct(cHamBulider1);
76 
77     Hamburger *h1 = cHamBulider1->getProduce();
78     h1->show();
79 
80     HamBulider *cHamBulider2 = new ConcreteHamBulider("","","");
81     d->Construct(cHamBulider2);
82 
83     Hamburger *h2 = cHamBulider2->getProduce();
84     h2->show();
85     return 0;
86 }

建造者应用场景:主要用于创造一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。建造者模式可以使建造代码与表示代码分离,由于建造者模式隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。

建造者模式实在创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式所适用的模式。

由以上例子分析。Hamburg的制造流程是固定不变的,即从上到下:面包-鸡肉-面包;我们只需要定义 面包,鸡肉,面包的口味。口味的确定需要具体的HamburgBulider来确定,由Director来完成制作流程,这样不会因为失误造成 鸡肉-面包-面包的错误情况。

优质内容筛选与推荐>>
1、O(2),O(3),Ofast 手动开[吸氧]
2、自然数组排列
3、aspx与aspx.cs的关系
4、80后营销人如何为理想插上丰满“羽翼”?
5、【JavaScript】前端开发框架三剑客—AngularJS VS. Backone.js VS.Ember.js


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号