专栏首页wfacebossJavaScript设计模式--桥梁模式--引入

JavaScript设计模式--桥梁模式--引入

1.使用情况

(1)事件的监控

#1,利用页面的button来选择宠物的例子(思路)

button.addEvent(element,"click",getPetByBame);
    function getPetByBame(e){
        var id = this.id;
        asyncRquest("GET",'pet.action?id='+id,function(pet){
            consols.log("request pet"+pet.resopnseText)
        })
    }

#2,addEvent函数

/*obj:需要增加事件的对象
* type:事件名称
* fn:执行事件的函数
* */
function addEvent(obj,type,fn){//addEvent:为某个文档节点增加事件的方法
    if(obj.addEventListener){//Mozilla中:
        obj.addEventListener(type,fn,false);
    }else if(obj.attachEvent){//IE中:
        obj["e"+type+fn] = fn;
        obj[type+fn] = function(){
            obj["e"+type+fn]()
        }
        obj.attachEvent("on"+type,fn)
    }
}

总结:该种方式对于单元测试很难进行

改进为用简单的桥梁模式来解决

#1,后台中的api

function getPetByBame(id,callBack){
        sayncRquest("GET",'url?id='+id,function(pet){
            callBack(pet)
        })

#2,桥梁

//定义一个桥梁叫抽象和实现相互联系在一起
    addEvent(element,"click",getPetByNameBridge)
    function getPetByNameBridge(){
        getPetByBame(this.id,function(pet){
            consols.log("request pet"+pet.resopnseText);
        })
    }

总结:这种做法使API和展现层完全分离,API和展现层可以灵活的变动。

(2)特权函数

//特权函数
var  privilege=function () {
    //信息全封闭,内部业务逻辑复杂,做成一个特权函数,使调用方便
    var complex=function (x,y) {
       //复杂的数学处理
    }

 this.bridge=function () {  //提供公共接口,返回一个单体
     return {
         bridgeAdd:function () {
             //处理前
             complex(1,2);
             //处理后
         }

     }
 }
}

(3)多个类的连接

//多个类的连接
var class1=function (a,b) {
    this.a=a;
    this.b=b;
}
    var class2=function (e) {
        this.e=e;
    }
    //桥梁的连接
    var  bridgeClass=function () {
        this.one=new Class1(1,2);
        this.two=new Class1(1);
    }
//目的:两个类能独立的修改,而门面的意义在于调用方便

桥梁模式:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python 小知识点(9)--反射

    1.hasattr(obj,name_str) , 判断一个对象obj里是否有对应的name_str字符串的方法

    wfaceboss
  • JavaScript设计模式--简单工厂模式

    工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。该模式使一个类的实例化延迟到了子类。而子类可以重写接口方法以便创建的时候指定自己的对象类型...

    wfaceboss
  • 属性的重要特征

    (1)有时候某一个属性值可能不是直接返回一个对应私有字段的值,而是调用一些方法,或其他业务逻辑(get和set本身就是方法)

    wfaceboss
  • [第二周]Jupyter Notebook和Markdown知识点汇总

    打开Notebook,可以看到主面板。在菜单栏中有Files、Running、Clusters、Conda四个选项。用到最多的是Files,我们可以在这里完成n...

    OrekiShiko
  • 让CNN有了平移不变性,同时提升ImageNet成绩:Adobe开源新方法,登上ICML

    虽然,有著名的抗锯齿 (Anti-Aliasing,AA) 方法,致力解决这个问题。但把这种模块直接插进网络,会严重影响模型的表现。

    量子位
  • ICLR2020 | 深度自适应Transformer

    一篇来自ICLR2020,facebook人工智能实验室的论文,关于改进Transformer推理速度的。

    kaiyuan
  • Spring之配置项管理小结

    正如webx框架文档里面所说,在一个应用中我们总是会遇到一些参数,例如:数据库服务器IP地址、端口、用户名;这些参数有一个共性,那就是:它们和应用的逻辑无关,只...

    加多
  • 无线网络嗅探中的Radiotap

    引言 在WLAN无线网络抓包的时候不管是用wireshark、tcpdump还是scapy都会出现Radiotap、LLC、SNAP协议层。 如图所示: ? L...

    FB客服
  • Games101--Assignment2

    修改函数rasterize_triangle(const Triangle& t)。 该函数的内部工作流程如下:

    Enterprise_
  • Games101--Assignment2

    修改函数rasterize_triangle(const Triangle& t)。 该函数的内部工作流程如下:

    Enterprise_

扫码关注云+社区

领取腾讯云代金券