zoukankan      html  css  js  c++  java
  • JavaScript 设计模式之建造者模式

    一、建造者模式概念解读

      1.建造者模式概念文字解读

          建造者模式可以将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。也就是说如果我们用了建造者模式,那么用户就需要指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了。建造者模式实际,就是一个指挥者,一个建造者,一个使用者调用具体建造者工作得出结果的客户。

          建造者模式主要用于“分步骤构建一个复杂的对象”,这在其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。一句话:指挥者分配任务,建造者进行开发,各执其责,稳定在一个大的流程里面去。

      2.建造者模式概念拟物化解读

         一位女士要建造一座别墅,需要找来一位包工头,包工头再将具体的任务分配给工人做,做完之后再给女士使用。 

    二、建造者模式的作用和注意事项

      模式作用:

        1.分步骤创建一个复杂的对象(先各自独立的细节)。

        2.解耦封装过程和具体创建的组件。

        3.无需关心组件如何组装。

      注意事项:

        1.一定要有一个稳定的算法进行支持(要先把合同签好)。

        2.加工工艺是暴露的(使用者可以反馈问题,中间需要介入一个包工头)。

         八字:各执其职,拆解流程。

    三、建造者模式的代码实战和总结

     1.一个实例

        代码如下:

    <meta charset="utf-8"/>
    <script type="text/javascript">
    //1.产出的东西是房子house
    //2.包工头contractor 调用工人进行开工 而且他要很清楚工人们具体的某一个大项
    //3.工人worker 是盖房子的 工人可以建卧室make_bedroom、建客厅make_livingroom、建厨房make_kitchen
    //4.包工头只是一个接口而已,他不干活,他只对外说我能盖房子
    
    //房子House
    function House(){   //作为类,首字母大写
        this.bedroom="";
        this.livingroom="";
        this.kitchen="";
    }
    //包工头Contractor
    function Contracter(){
         this.makeHouse=function(worker){
             worker.make_bedroom();
             worker.make_livingroom();
             worker.make_kitchen();
         }
    }
    //工人Worker
    function Worker(){
         this.make_bedroom=function(){
             alert('卧室我盖好了');   //因为alert 的是中文,所以在最前面要一个utf-8
         }
         this.make_livingroom=function(){
             alert('客厅我盖好了');
         }
         this.make_kitchen=function(){
             alert('厨房我盖好了');
         }
         //交工handover
         this.handover=function(){
             var _house= new House();
             _house.bedroom="ok";
             _house.livingroom="ok";
             _house.kitchen="ok";
             return _house;
    
         }
    };
    var worker=new Worker;
    var contracter=new Contracter();
    contracter.makeHouse(worker);//包工头声称他能盖房子,是一个接口,故要给他一个makeHouse(worker)
    var myhouse=worker.handover();
    console.log(myhouse);
    
    //整个过程女主人不用和工人直接接触,只需要交代给包工头就可以了
    
    </script>

        结果截图:

     

       

  • 相关阅读:
    ios8 xcode6 下的启动界面设置和图标设置
    写一些有关android的东西吧,那时候玩android时候的一些笔记
    使用sqlite3 有关tableview删除cell的问题
    iOS 使用CLGeocoder获取地理位置
    ios 解决有关火星坐标的问题
    iOS 火星坐标相关整理及解决方案汇总(转)
    IOS开发UI篇之──自定义UIActionSheet
    python中新式类和经典类的区别
    python中几个常用的算术函数
    多线程
  • 原文地址:https://www.cnblogs.com/shenxiaolin/p/5443174.html
Copyright © 2011-2022 走看看