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 ...
随机推荐
- java 数据结构与算法---二叉树
原理来自百度百科 推荐数据演示网址 :https://www.cs.usfca.edu/~galles/visualization/BST.html 一.什么是二叉树 二叉树的每个结点至多只有 ...
- Java多线程之ThreadLocal总结
原贴地址:http://www.cnblogs.com/zhengbin/p/5674638.html 阅读目录 官方对ThreadLocal的描述: <Thinking in Java> ...
- MachineLearning Exercise 7 : K-means Clustering and Principle Component Analysis
findClosestCentroids.m m = size(X,); :m [value index] = min(sum((repmat(X(i,:),K,)-centroids).^,)); ...
- linux shell 执行命令顺序
1.shell命令搜索顺序 在linux shell 中输入一个命令,如果有多个同名指令,shell需要按照一定规则去取优先级高的一个执行,shell命令的搜索顺序为: 1.别名,使用alias创建的 ...
- VSS2005 上传pdf 空白
加补丁 VS80-KB943847-X86-INTL.exe
- POJ.1067 取石子游戏 (博弈论 威佐夫博弈)
POJ.1067 取石子游戏 (博弈论 威佐夫博弈) 题意分析 简单的威佐夫博弈 博弈论快速入门 代码总览 #include <cstdio> #include <cmath> ...
- debian8安装harbor
这里的系统版本是debian8.8,harbor版本为1.1.2. 1.安装docker-ce 1.1.Install packages to allow apt to use a repositor ...
- php 百家姓
private $surname = array('赵','钱','孙','李','周','吴','郑','王','冯','陈','褚','卫','蒋','沈','韩','杨','朱','秦','尤' ...
- 仿微博的JQuery日历控件
实现原理主要是处理table,生成tr td,其中最重要的是如何找出每月第一天是星期几,然后就能对应出这个月的余下天数. 日历控件网上一搜一大把,但是我觉得自己写一遍还是有好处的.代码可以查看本页源代 ...
- BZOJ 4827 循环卷积
题意:求两个手环任意旋转对应位置的差值+c的平方最小 设b旋转到k最小,那么先将b扩张一倍构成一圈,那么答案式子就是 将这个式子展开一下,事情就变得有趣了起来 这个式子将a[ ]翻转可以化成卷积形式 ...