zoukankan      html  css  js  c++  java
  • [设计模式]桥接模式

    桥接模式可以把抽象类和实现类进行各自封装和扩展,目的在于解耦。
    由于桥接模式可以增强了组合性,我们可以很灵活地修改类,并且很好地重用。
    我们可以先看一下简单的片断:

    //这是一个演示简单的桥接模式片断(本例子只假设在标准浏览器情况下)

    //先获取DOM
    var DomA = document.getElementById('divA');

    //给DomA绑定事件
    DomA.addEventListener('click',funcA,false);

    //定义funcA
    function funcA(){
    var id = this.id;
    alert("I'm HTMLElement, My ID is:" + id);
    }

    以上的例子很简单,就是把一个DOM绑定了click事件,执行一个含有alert()的函数。
    很明显,funcA能做的事只有两件:
    1、获得元素的ID。
    2、显示I'm HTMLElement, My ID is: divA。

    funcA就是所谓的“写死”了,也就是强耦合,里面的alert()永远只是服务于funcA,大大失去了灵活性。
    现在我们用桥接模式的思想,把funcA拆分,解耦。

    //这是一个演示简单的桥接模式片断(本例子只假设在标准浏览器情况下)

    //先获取DOM
    var DomA = document.getElementById('divA');

    //给DomA绑定事件
    DomA.addEventListener('click',funcA,false);


    //这里把上例的funcA进行拆分出一个funcAlert
    function funcAlert(txt,id){
    alert(txt+id);
    }

    //定义funcA
    function funcA(){
    var id = this.id;
    //桥接funcAlert函数
    funcAlert("I'm HTMLElement ,My ID is:",id);
    }

    好了,以后funcAlert()就可以作用于其他函数,只要给funcALert(),传入参数即可。
    当然,本例只是为了演示而做了一个比较简单的拆分。er......看起来有点无谓。
    不管如何,只是表达了桥接的思想。
    其实就是把多个功能尽量拆分,解耦,做到可重用,然后在使用时,再拼装起来。将抽象部分与它的实现部分分离,使它们都可以独立变化,重用。就这是桥接模式的思想。

    还记得我在分享单体模式吗?里面有一个这样的片断:

    var XZB = (function(){
    var G = 10;
    var Return = {
    getG:function(){
    return G;
    },
    setG:function(g){
    G = g;
    }
    }
    return Return;
    })();

    其实里面的Return也是一种解耦,只不过他的耦合度相对低一点而已。
    里面的Return可以设定有N种方法来实现N种功能,只不过他们都只局限于操作里面的私有变量。

    OK,讲完了桥装模式,我们来讲讲他的优缺点:
    优点:
    降低抽象层和具体实现之间的耦合,使各层独立出来管理。桥接模式成了各层的粘合剂。

    缺点:
    因为每个桥接都会调用外层的函数,这就需要往上搜索变量,会有性能上的影响。
    还有一点,如果被桥接的函数只是在于桥接函数里面调用,而再也没被其他函数调用,这时就没必要桥接了。

    写在最后,看完这个桥接模式之后,有没发现和我之前写的工厂模式有点相似,难道工厂模式就只是多了判断,然后选择性调用吗?
    er...我也说不清,总言之,我觉得设计模式只是实现功能的代码写法,也并不是说什么功能就应该用什么模式,灵活运用才是王道。


  • 相关阅读:
    Yahoo团队经验:网站性能优化的34条黄金法则
    SaltStack中状态间关系unless、onlyif、require、require_in、watch、watch_in
    kubectl 常用命令一
    Linux系统的限制
    DNS服务器搭建与配置
    Python对文件的操作
    SaltStack schedule功能
    saltstack的salt-api介绍
    SaltStack事件驱动 – event reactor
    SaltSack 中Job管理
  • 原文地址:https://www.cnblogs.com/zzbo/p/2350823.html
Copyright © 2011-2022 走看看