js设计模式

建造者模式:
     就是所谓的发布订阅模式(Publish/Subscribe)
     定义一对多的模式。
·模式作用:
    1.支持简单的广播通信,自动通知所有已经订阅过的对象。
    2.页面载入后目标对象很容易与观察者存在一种动态关联,增加灵活性。
    3.目标对象与观察者之间的抽象耦合关系能够单独扩展以及重用。

·注意事项:
    1.监听在触发之前。

例子:实现 队列 触发 

    
    (function(){
        let o =$({});
        $.jianting=function(){
            o.on.apply(o,arguments);
        }
        $.fabu=function(){
            o.trigger.apply(o,arguments);
        }
        $.qingchu=function(){
            o.off.apply(o,arguments)
        }
    })()

    $.jianting('/all',function(){
        ...
    })

    $.fabu('/all',[1,2,3])

观察者模式:
     分步骤构建一个复杂对象。
     指挥者不关注细节,只提要求。建造者具体干活。
·模式作用:
    1.分步创建一个复杂对象。
    2.解耦封装过程和具体创建的组件。
    3.无需关心组件如何组装

·注意事项:
    1.一定要一个稳定的算法进行支持。
    2.加工工艺是暴露的。

例子:$.ajax() 方法就是建造者模式。类的方式。       



代理模式:

·模式作用:
    1.远程代理(一个对象将不同空间的对象进行局部代理)
    2.虚拟代理(根据需要创建开销很大的对象如渲染网页暂时用占位代替真图)
    3.安全代理(控制真实的访问权限)
    4.智能指引(调用对象代理另外一些事情如垃圾回收机制)

·注意事项:
    1.不能滥用代理,有时候仅仅是给代码增加复杂度。
    

工厂模式:

·例子:
    var XMLHttpFactiory =function(){};        
    
    // 抽象工厂模式
    let XMLHttpFactory=function(){};
    XMLHttpFactory.prototype={
        // 如果真的要调用这个方法会抛出一个错误,它不能被实例化,只能用来派生子类
        createFactory:function(){
            throw new Error('this is an abstract class ')
        }
    }

    // 派生之类 this指向
    let XHRHandler=function(){
        XMLHttpFactory.call(this);
    }

    XHRHandler.prototype=new XMLHttpFactory(); //返回prototype实例
    XHRHandler.prototype.constructor=XHRHandler;//构造函数 this指向

    // 实现具体方法
    XHRHandler.prototype.createFactory=function(){
        let XMLHttp=null;
        if(window.XMLHttpRequest){
            XMLHttp=new XMLHttpRequest()
        }
        else if(window.ActiveXObject){
            XMLHttp=new ActiveXObject('Microsoft.XMLHTTP')
        }
        return XMLHttp;
    }

    // 简单工厂模式

    var XMLHttpFactory=function(){};
    XMLHttpFactory.createXMLHttp=function(){
        var XMLHttp=null;
        if(window.XMLHttpRequest){
            XMLHttp=new XMLHttpRequest()
        }
        else if(window.ActiveXObject){
            XMLHttp=new ActiveXObject('Microsoft.xmlhttp')
        }
        return XMLHttp;
    }
    var AjaxHander=function(){
        var XMLHttp=XMLHttpFactory.createXMLHttp();
    }



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值