设计模式C++描述----07.建造者(Builder)模式

一. 概述

Builder 模式要解决的问题是:当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要要复杂对象的创建过程和这个对象的表示(展示)分离开来,这样做的好处就是通过一步步的进行复杂对象的构建,由于在每一步的构造过程中可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样。

二. 举例

KFC 与 Mcdonalds 的汉堡生成过程大致都是一样的,假设分为4个步骤;

但是 KFC 与 Mcdonalds 的汉堡味道有所差别,主要是在每一步的细节上有所不同。

顾客要吃汉堡并不关心具体的生产步骤,其实汉堡店也不关心,因为数百年来,这些步骤者是相同的,差别只在细节上。比如盐放多少,辣椒放多少等等。

结构如下:

Builder:为最基本的生产步骤

KFCBuilder:为KFC的具体生产步骤

MCDBuilder:为Mcdonalds的具体生产步骤

Director:为指挥者,用它来控件建造过程

[cpp]  view plain copy
  1. //  
  2. //建造者  
  3. class Builder  
  4. {  
  5. public:  
  6.     virtual ~Builder()  
  7.     {  
  8.     }  
  9.   
  10.     virtual void BuildSetp1() = 0;  
  11.     virtual void BuildSetp2() = 0;  
  12.     virtual void BuildSetp3() = 0;  
  13.     virtual void BuildSetp4() = 0;  
  14. };  
  15.   
  16. //KFC 具体建造者  
  17. class KFCBuilder:public Builder  
  18. {  
  19. public:  
  20.     void BuildSetp1()  
  21.     {  
  22.         cout<<"KFC Step1:"<<endl;  
  23.     }  
  24.   
  25.     void BuildSetp2()  
  26.     {  
  27.         cout<<"KFC Step2:"<<endl;  
  28.     }  
  29.   
  30.     void BuildSetp3()  
  31.     {  
  32.         cout<<"KFC Step3:"<<endl;  
  33.     }  
  34.   
  35.     void BuildSetp4()  
  36.     {  
  37.             cout<<"KFC Step4:"<<endl;  
  38.     }  
  39.   
  40. };  
  41.   
  42. //Mcdonalds 具体建造者  
  43. class MCDBuilder:public Builder  
  44. {  
  45. public:  
  46.     void BuildSetp1()  
  47.     {  
  48.         cout<<"Mcdonalds Step1:"<<endl;  
  49.     }  
  50.       
  51.     void BuildSetp2()  
  52.     {  
  53.         cout<<"Mcdonalds Step2:"<<endl;  
  54.     }  
  55.       
  56.     void BuildSetp3()  
  57.     {  
  58.         cout<<"Mcdonalds Step3:"<<endl;  
  59.     }  
  60.       
  61.     void BuildSetp4()  
  62.     {  
  63.         cout<<"Mcdonalds Step4:"<<endl;  
  64.     }  
  65.       
  66. };  
  67.   
  68. //  
  69. //指挥者  
  70. class Director  
  71. {  
  72. private:    
  73.     Builder *m_pBuilder;    
  74.   
  75. public:    
  76.     Director(Builder *builder)  
  77.     {  
  78.         m_pBuilder = builder;  
  79.     }  
  80.       
  81.     void Create()  
  82.     {  
  83.         m_pBuilder->BuildSetp1();    
  84.         m_pBuilder->BuildSetp2();    
  85.         m_pBuilder->BuildSetp3();    
  86.         m_pBuilder->BuildSetp4();    
  87.     }    
  88. };  
  89.   
  90.   
  91. //  
  92. //测试代码  
  93. int main(int argc,char* argv[])  
  94. {  
  95.     KFCBuilder kfc; //想吃KFC  
  96.    
  97.     Director director(&kfc);    
  98.     director.Create();    
  99.       
  100.     return 0;  
  101. }  

三. 说明

1. 建造者模式,在建造顺序上通常是稳定的。

2. 指挥者(Director),来隔离用户与具体建造过程的关联。

3. 它的好处是,客户端不需要知道具体的建造者方法,也不用但心忘记某一步骤没写,这些步骤统一由Director来调用。


转自:http://blog.csdn.net/lwbeyond/article/details/7542899
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Builder模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 统设计中,有时候面临着一个“复杂系统”的创建工作,该对象通常由各个部分的子对象用一定的算法构成,或者说按一定的步骤组合而成;这些的算法和步骤是稳定的,而构成这个对象的子对象却经常由于需求改变而发生变化,此时我们可以选择使用Builder模式。尽管Builder模式相当容易让人误解,但我认为这几点应该是不会有错的。因此我个人认为Builder模式中要好好把握如下几点 1. 需要创建的对象是复杂对象 2. 对象的创建过程是一步步创建(即:可能由于过程的不同而导致有不同的对象展示) 3. 明确建造者(Builder)、具体建造者(Concrete Builder)、指导者(Director)、产品(Product)之间的职责和联系。 ◆建造者(Builder): 给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。模式中直接创建产品对象的是 具体建造者(ConcreteBuilder):具体建造者类必须实现这个接口所要求的方法:一个是建造方法,另一个是结果返还方法。 ◆具体建造者(Concrete Builder): 担任这个角色的是于应用程序紧密相关的类,它们在应用程序调用下创建产品实例。这个角色主要完成的任务包括: ■实现Builder角色提供的接口,一步一步完成创建产品实例的过程。 ■在建造过程完成后,提供产品的实例。 ◆指导者(Director): 担任这个角色的类调用具体建造者角色以创建产品对象。导演者并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者对象。 ◆产品(Product): 产品便是建造中的复杂对象。 详细见博客 http://blog.csdn.net/xiaoting451292510/article/details/8330462
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值