JS设计模式——8.桥接模式
桥接模式的用途
在实现API的时候,桥接模式非常有用.
在设计一个JavaScript API的时候,可以用这个模式来弱化它与使用它的类和对象之间的耦合.
示例:事件监听器
桥接模式最常见和实际的应用的场合之一是事件监听器回调函数.
假设有一个名为getBeerById的API函数,它根据一个标识符返回有关某种啤酒的信息.
常规的实现:
addEvent(element,'click', getBeerById);
function getBeerById(e){
var id = this.id;
asyncRequest('GET', 'beer.uri?id='+id, function(resp){
console.log('OK');
});
}
我们看到他是从this环境中获得的ID.如果你要对这个API函数做单元测试,或在命令行环境中执行他,那就没法了.
对API开发来说,最好从一个优良的API开始,不要把他与任何特定的实现(环境)搅在一起.
改进的实现
function getBeerById(id, callback){
asyncRequest('GET', 'beer.uri?id='+id, function(resp){
callback(resp.responseText);
});
}
这实现要好很多了,也许我们做到这里就已经足够了.但是,我们可以进一步用桥接模式把抽象隔离开来.从而弱化它与实现它的对象之间的耦合.
桥接的实现
addEvent(element, 'click', getBeerByIdBridge);
function getBeerByIdBridge (){
getBeerById(this.id, function(beer){
console.log('OK');
});
}
其实我们可以直接如下使用:
addEvent(element, 'click', getBeerById(this.id, function(e){
console.log('OK');
}));
那么,我们为什么要用桥接这个模式呢?
存在的就是合理的,试想当我们需要修改getBeerById的参数的时候,如果不用桥接模式,那么我们岂不是要在每一处注册的地方去修改一次,如果用了桥接模式,那么只要修改一次就OK了.
示例:特权函数
如果一个公用的接口抽象了一些也许应该属于私用性的较复杂的任务,那么可以使用桥接模式来收集某些私用性的信息.可以用一些具有特权的方法作为桥梁以便访问私用变量空间,也就是特权函数.
var Public = function(){
var secret = 2;
this.privilegedGetter = function(){
return secret;
};
};
var o = new Public();
var data = o.privilegedGetter();
示例:用桥接模式联结多个类
var Class1 = function(a){
this.a = a;
};
var Class2 = function(b){
this.b = b;
};
var BridgeClass = function(a, b){
this.one = new Class1(a);
this.two = new Class2(b);
};
这个看起来很像适配器:接收大量的数据,并将其发送给责任方的一种辅助必手段.
示例:构建XHR连接队列
有待补充...
JS设计模式——8.桥接模式的更多相关文章
- js设计模式(3)---桥接模式
0.前言 看设计模式比较痛苦,一则是自己经验尚浅,不能体会到使用这些设计模式的益处:二则是不能很好把握使用这些设计模式的时机.所以这一部分看得断断续续,拖拖拉拉,为了了却这快心病,决定最近一口气看完几 ...
- JS设计模式——5.单体模式
JS设计模式——5.单体模式 http://www.cnblogs.com/JChen666/p/3610585.html 单体模式的优势 用了这么久的单体模式,竟全然不知!用它具体有哪些好处呢? ...
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 ...
- java面试题之----jdbc中使用的设计模式(桥接模式)
1.JDBC(JavaDatabase Connectivity) JDBC是以统一方式访问数据库的API. 它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracl ...
- php设计模式之桥接模式
php设计模式之桥接模式 一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 其实就是讲不相关的东西通过类(本例中是SendInfo)结合在一起,从而 ...
- js设计模式——7.备忘录模式
js设计模式——7.备忘录模式 /*js设计模式——备忘录模式*/ // 备忘类 class Memento { constructor(content) { this.content = conte ...
- js设计模式——6.模板方法模式与职责链模式
js设计模式——6.模板方法模式与职责链模式 职责链模式
- js设计模式——5.状态模式
js设计模式——5.状态模式 代码演示 /*js设计模式——状态模式*/ // 状态(红灯,黄灯,绿灯) class State { constructor(color) { this.color = ...
- js设计模式——4.迭代器模式
js设计模式——4.迭代器模式 代码演示 /*js设计模式——迭代器模式*/ class Iterator { constructor(container) { this.list = contain ...
随机推荐
- L2 L3 L4
第二层交换机,是根据第二层数据链路层的MAC地址和通过站表选择路由来完成端到端的数据交换的.因为站表的建立与维护是由交换机自动完成,而路由器又是属于第三层设备,其寻址过程是根据IP地址寻址和通过路由表 ...
- Android Studio系列教程
Android Studio系列教程 Android Studio系列教程一 —- 下载与安装 Android Studio系列教程二 —- 基本设置与运行 Android Studio系列教程三 — ...
- Redis在Windows环境下单机安装及远程访问方案
一.下载Windows版Redis 打开https://github.com/MicrosoftArchive/redis/tags地址,找到最新版Redis安装包(Redis-x64-3.2.100 ...
- SQL利用Case When Then多条件
CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 WHEN 条件3 THEN 结果3 WHEN 条件4 THEN 结果4......... ...
- springboot学习笔记-2 一些常用的配置以及整合mybatis
一.一些常用的配置 1.1 使用没有父POM的springboot 通过添加scope=import的依赖,仍然能获取到依赖管理的好处: <dependencyManagement> &l ...
- [AT2567] [arc074_c] RGB Sequence
题目链接 AtCoder:https://arc074.contest.atcoder.jp/tasks/arc074_c 洛谷:https://www.luogu.org/problemnew/sh ...
- CF739E Gosha is hunting 【WQS二分 + 期望】
题目链接 CF739E 题解 抓住个数的期望即为概率之和 使用\(A\)的期望为\(p[i]\) 使用\(B\)的期望为\(u[i]\) 都使用的期望为\(p[i] + u[i] - u[i]p[i] ...
- BZOJ3522 [Poi2014]Hotel 【树形dp】
题目链接 BZOJ3522 题解 就是询问每个点来自不同子树离它等距的三个点的个数 数据支持\(O(n^2)\),可以对每个距离分开做 设\(f[i][j]\)表示\(i\)的子树中到\(i\)距离为 ...
- MYSQL指定用户访问指定数据库
1.使用navicat 1)首先使用root用户新建连接 2)新建mysql用户 3)点击权限,选择添加权限,出现MySQL中已存在的数据库列表,选择你要为该新建用户开放的数据库,此处选择“maiba ...
- git<Commit和Push的区别>
git作为支持分布式版本管理的工具,它管理的库(repository)分为本地库.远程库. git commit操作的是本地库,git push操作的是远程库. git commit是将本地修改过的文 ...