博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[设计模式]桥接模式
阅读量:5317 次
发布时间:2019-06-14

本文共 1688 字,大约阅读时间需要 5 分钟。

桥接模式可以把抽象类和实现类进行各自封装和扩展,目的在于解耦。

由于桥接模式可以增强了组合性,我们可以很灵活地修改类,并且很好地重用。
我们可以先看一下简单的片断:

//这是一个演示简单的桥接模式片断(本例子只假设在标准浏览器情况下) //先获取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...我也说不清,总言之,我觉得设计模式只是实现功能的代码写法,也并不是说什么功能就应该用什么模式,灵活运用才是王道。

转载于:https://www.cnblogs.com/zzbo/archive/2012/02/14/2350823.html

你可能感兴趣的文章
vlan学习
查看>>
【转贴】SAP HANA内存数据库详解
查看>>
两种应该掌握的排序方法--------1.shell Sort
查看>>
vuejs动态组件给子组件传递数据
查看>>
杭电2065(递推)红色病毒
查看>>
js 获取视频的第一帧
查看>>
各种正则验证
查看>>
观察者模式(Observer)
查看>>
python中numpy.r_和numpy.c_
查看>>
WPF简单模拟QQ登录背景动画
查看>>
bzoj 2038 小Z的袜子
查看>>
egret3D与2D混合开发,画布尺寸不一致的问题
查看>>
freebsd 实现 tab 命令 补全 命令 提示
查看>>
struts1和struts2的区别
查看>>
函数之匿名函数
查看>>
shell习题第16题:查用户
查看>>
实验4 [bx]和loop的使用
查看>>
Redis常用命令
查看>>
2018.11.06 bzoj1040: [ZJOI2008]骑士(树形dp)
查看>>
2019.02.15 bzoj5210: 最大连通子块和(链分治+ddp)
查看>>