不老呢做草药--建造者(Builder)模式

来源:互联网 发布:html5 答题游戏源码 编辑:程序博客网 时间:2024/04/28 05:31

原创,转载请注明!

     不老呢做草药,不论是做治痢疾的,还是治烧烫伤的,做草药的步骤是固定的,主要分这么几种:

1 采药;
2 烘干;
3 研磨;
4 混合;

于是,他总结了一个抽象的做草药办法--草药生成器:
abstract class 草药生成器 {
    virtual 采药(){}
    virtual 烘干(){}
    virtual 研磨(){}
    virtual 混合(){}
    virtual 得到草药(){
       return 0;
    }
}
各种各样的草药继承自草药草药生成器:
class 烫伤膏生成器:public 草药生成器 {
    virtual 采药() {
         1.去对面山上采冻菇;
         2.去“摇钱”摘“地罗素呢”;
    }
    virtual 烘干{
         先烘干“地罗素呢”,再把冻菇烘干成八分熟,出香味;
    }
    virtual 研磨{
         “地罗素呢”研磨成皮,冻菇成粉末;
    }
    virtual 混合(){ 
         倒在脸盘里搅拌100下; 
    }
    virtual 得到草药(){
       return 烫伤膏;
    }
   private:
   烫伤膏;
}
class 痢疾药生成器:public 草药生成器 {
    virtual 采药() {
        1. 去“沙子呢丘”采冬虫夏草;
        2. 去“岭背”采艾叶;
    }
    virtual 烘干{
        冬虫夏草和艾叶烘干无先后;
    }
    virtual 研磨{
        冬虫夏草和艾叶研磨成颗粒;
    }
    virtual 混合(){ 
       倒在脸盘中搅拌100下; 
   }
    virtual 得到草药(){
       return 痢疾药;
    }
   private:
   痢疾药;
}
计一个制药人,负责使用草药生成器的各种各种功能来做药:
class 制药人 {
   List<草药生成器> interfaces;
   制药人(草药生成器 interface){
        this.interfaces.pushback ( interface );
   }
   add ( 草药生成器 interface ) {
        this.interfaces.pushback ( interface );
   }
   做草药(){
       //具体如何做,全在于制药人!
       for( iterator i = interface.begin(); i !=interfaces.end(); i.next()) {
             interface.采药();
             interface.烘干();
             interface.研磨();
             interface.混合();
       }
   }
}

      有一天,村里的小孩小兵因为玩火,烫伤了脸,小兵的妈妈带着小兵找上门来请不老呢给她儿子治治,不老呢于是立即开始治病:
main(){
   草药生成器 interface = new 烫伤膏生成器();
   制药人 淑美 = new 制药人(interface);
   淑美.做草药();
}

建造者Builder模式--建造型模式之二

优点是:将一个复杂对象的构建和表现形式分开,使同样的构建过程(采药、烘干、研磨、混合)可以生成不同的产品--烫伤膏和痢疾药。


参与者:
• Builder
— 为创建一个 Product对象的各个部件指定抽象接口。
• ConcreteBuilder
— 实现Builder的接口以构造和装配该产品的各个部件。
— 定义并明确它所创建的表示。
— 提供一个检索产品的接口
• Director
— 构造一个使用Builder接口的对象。
• Product
— 表示被构造的复杂对象。 ConcreteBuilder创建该产品的内部表示并定义它的装配过程。
— 包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

协作
• 客户创建Director对象,并用它所想要的 Builder对象进行配置。
• 一旦产品部件被生成,导向器就会通知生成器。
• 生成器处理导向器的请求,并将部件添加到该产品中。
• 客户从生成器中检索产品。
下面的交互图说明了 Builder和Director是如何与一个客户协作的。


效果
Builder模式的主要效果:
1 ) 它使你可以改变一个产品的内部表示
B u i l d e r对象提供给导向器一个构造产品的抽象接口。该接口使得生成器可以隐藏这个产品的表示和内部结构。它同时也隐藏了该产品是如
何装配的。因为产品是通过抽象接口构造的,你在改变该产品的内部表示时所要做的只是定义一个新的生成器。
2) 它将构造代码和表示代码分开
B u i l d e r模式通过封装一个复杂对象的创建和表示方式提高了对象的模块性。客户不需要知道定义产品内部结构的类的所有信息;这些类是不出现
在B u i l d e r接口中的。每个 C o n c r e t e B u i l d e r包含了创建和装配一个特定产品的所有代码。这些代码只需要写一次;然后不同的 D i r e c t o r可以复用它以在相同部件集合的基础上构作不同的P r o d u c t。
3 ) 它使你可对构造过程进行更精细的控制
B u i l d e r模式与一下子就生成产品的创建型模式不同,它是在导向者的控制下一步一步构造产品的。仅当该产品完成时导向者才从生成器
中取回它。因此 B u i l d e r接口相比其他创建型模式能更好的反映产品的构造过程。这使你可以更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。

参考:《设计模式》