0.前言

看设计模式比较痛苦,一则是自己经验尚浅,不能体会到使用这些设计模式的益处;二则是不能很好把握使用这些设计模式的时机。所以这一部分看得断断续续,拖拖拉拉,为了了却这快心病,决定最近一口气看完几种常见的设计模式。今天就从桥接模式开始吧。

1.使用情况

最常用于事件监控上,也通过桥接联接多个类

1.1、事件监控

//错误的方式
  //这个API根据事件监听器回调函数的工作机制,事件对象被作为参数传递给这个函数。本例中并没有使用这个参数,而只是从this对象获取ID。
  addEvent(element,'click',getBeerById);
  function(e){
  var id =this.id;
  asyncRequest('GET','beer.url?id='+ id,function(resp){
  //Callback response
   console.log('Requested Beer: '+ resp.responseText);
  });
  }   //好的方式
  //从逻辑上分析,把id传给getBeerById函数式合情理的,且回应结果总是通过一个毁掉函数返回。这么理解,我们现在做的是针对接口而不是实现进行编程,用桥梁模式把抽象隔离开来。
  function getBeerById(id,callback){
  asyncRequest('GET','beer.url?id='+ id,function(resp){
  callback(resp.responseText)
  });
  }
  addEvent(element,'click',getBeerByIdBridge);
  function getBeerByIdBridge(e){
  getBeerById(this.id,function(beer){
  console.log('Requested Beer: '+ beer);
  });
  }

1.2、联接多个类

var  Class1 = function(a,b,c){
this.a = a;
this.b = b;
this.c = c;
}
var Class2 = function(d){
this.d = d;
} var BridgeClass = function(a,b,c,d){
this.one = new Class1(a,b,c);
this.two = new Class2(d);
}
这里使用桥接模式是为了让Class1、Class2能够独立于BridgeClass而发生改变。

2.桥接的利与弊

2.1利:弱化了代码之间的耦合,将抽象和其实现分离,便于二者独立变化、让API更加健壮,有利于分层,提高组件的模块化程度;提高可拓性。

2.3弊:增加开发成本,在性能方面可能会有所降低。

3.个人理解

1.桥接模式可以将抽象和其实现分离,方便他们独立变化;

2.主要应用情况是事件监听,将事件处理函数的抽象部分与实现部分分离,也就是抽像部分只是提供一个接口,具体的实现由桥接函数来实现;

3.好处:弱化了代码之间的耦合,有利于代码拓展

4.举例:

var  forEach = function(arr,fn){
var result = [];
for(var i=0;len= arr.length){
result.push(fn.call(this,i,arr[i]));
}
return result;
} function deal(){
  var arr = [1,2,3,4,5];
var b = forEach(arr,function(i,n){
return n*n;
})
}

js设计模式(3)---桥接模式的更多相关文章

  1. JS设计模式——8.桥接模式

    桥接模式的用途 在实现API的时候,桥接模式非常有用. 在设计一个JavaScript API的时候,可以用这个模式来弱化它与使用它的类和对象之间的耦合. 示例:事件监听器 桥接模式最常见和实际的应用 ...

  2. JS设计模式——5.单体模式

    JS设计模式——5.单体模式 http://www.cnblogs.com/JChen666/p/3610585.html   单体模式的优势 用了这么久的单体模式,竟全然不知!用它具体有哪些好处呢? ...

  3. 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)

    原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 ...

  4. java面试题之----jdbc中使用的设计模式(桥接模式)

    1.JDBC(JavaDatabase Connectivity) JDBC是以统一方式访问数据库的API. 它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracl ...

  5. php设计模式之桥接模式

    php设计模式之桥接模式 一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 其实就是讲不相关的东西通过类(本例中是SendInfo)结合在一起,从而 ...

  6. js设计模式——7.备忘录模式

    js设计模式——7.备忘录模式 /*js设计模式——备忘录模式*/ // 备忘类 class Memento { constructor(content) { this.content = conte ...

  7. js设计模式——6.模板方法模式与职责链模式

    js设计模式——6.模板方法模式与职责链模式 职责链模式

  8. js设计模式——5.状态模式

    js设计模式——5.状态模式 代码演示 /*js设计模式——状态模式*/ // 状态(红灯,黄灯,绿灯) class State { constructor(color) { this.color = ...

  9. js设计模式——4.迭代器模式

    js设计模式——4.迭代器模式 代码演示 /*js设计模式——迭代器模式*/ class Iterator { constructor(container) { this.list = contain ...

随机推荐

  1. [拇指飞动]构建高性能Web站点(1)

    <构建高性能Web站点>中提到了Aphache, Nginx和lighthttpd. 把我的笔记share一下. 一般来讲Apache主要是基于多进程模型,早期的fork模式会为每一个re ...

  2. c#实现无标题栏窗口的拖动

    当把窗体的FormBorderStyle属性设为None后会导致边框没了,结果窗体无法用鼠标拖动.最大.最下化和关闭…… 下面解决窗体可拖动问题:1.首先导入命名空间: using System.Ru ...

  3. 短小实用 渗透用的Python小脚本

    渗透的很多时候,找到的工具并不适用,自己码代码才是王道,下面三个程序都是渗透时在网络上找不到合适工具,自己辛苦开发的,短小实用. 一.记录root密码小工具 root.py #!/usr/bin/py ...

  4. Mosaic HDU 4819 二维线段树入门题

    Mosaic Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)Total S ...

  5. python 基础——实现一个带缓存功能的函数

    from functools import wraps def cache(func): data = {} @wraps(func) def wrapper(*args): if args in d ...

  6. 人体时钟hone hone clock

    摘要:一个由日本人设计的有意思的Flash时钟:人体时钟 hone hone clock .安装很简单,直接js导入即可,包括两种样式:透明背景和白色背景. 很可爱的一个设计,实现后效果如下: 使用方 ...

  7. 转: 关于 ssl的建立链接的过程

    转自:  http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html SSL/TLS协议运行机制的概述   作者: 阮一峰 日期: 2014年2月 5日 互 ...

  8. UIActivityIndicatorView的使用方法(旋转动画)

    - (void)viewDidLoad { [super viewDidLoad]; //创建UIActivityIndicatorView并设置样式:WhiteLarge为37 * 37,Gray和 ...

  9. Nodejs之WebSocket

    文章导读: 一.概述-what's WebSocket? 二.运行在浏览器中的WebSocket客户端+使用ws模块搭建的简单服务器 三.Node中的WebSocket 四.socket.io 五.扩 ...

  10. freeCodeCamp:Convert HTML Entities

    将字符串中的字符 &.<.>." (双引号), 以及 '(单引号)转换为它们对应的 HTML 实体. 现在这个表里找出要转化的符号https://dev.w3.org/h ...