桥接模式在Javascript设计模式开发中的应用
桥接模式将抽象部分与实现部分分离,使两者可以独立地变化,并以和谐的方式协同工作,抽象和实现部分可以独立地相互转换,减少了代码的耦合,提高了代码的可扩展性。根据GOF的定义,桥接模式的作用是将抽象的实现,使两将改变独立。这种模式在Javascript中常见的事件驱动编程有很大的好处。
桥接模式最常见和最实际的应用之一是事件侦听器的回调函数。例如:事件侦听器将事件处理语句封装到回调函数中,该函数通过接口而不是实现程序来实现。
基本理论
桥接模式定义:将抽象部分与其实现部分分离,使它们都可以独立更改。
桥接模式主要由4个角色组成:
(1)抽象类
(2)扩展抽象类
(3)实现类接口
(4)具体实现类
根据Javascript语言的特点,我们将其简化为2个角色:
(1)扩展抽象类
(2)具体实现类
如何理解桥接模式让我们举个例子来说明。
桥接模式的实现
理解桥接模式思想的关键是理解分离抽象和实现桥接部分的思想。
最简桥模式
事实上,jQuery我们经常使用的每个函数都是典型的桥接模式,我们模拟如下:
VAR每=功能(ARR,FN){
对于(var i = 0;i < arr.length;i++){
VaR值= ARR {我};
如果(fn.call(Val,我,Val,ARR)){
返回false;
}
}
}
var arr = { 1, 2, 3,4 };
每个(ARR,函数(i,v){
ARR {我} = V×2;
})
在这个例子中,我们将通过每个ARR阵列的功能,这是常见的例子,但是它包含了一个典型的桥接模式。
在这个例子中,抽象部分是每一个函数,也就是上面所说的扩展抽象类,实现部分是FN,即具体的实现类,抽象和实现部分可以独立地改变,这个例子很简单,但它是典型桥接模型的应用。
插件开发中的桥接模式
桥接模式的一个适用场景是组件开发,我们通常开发组件以适应不同的情况,并且组件将有许多不同的维度。桥接模式可以应用于此,将抽象与实现分离,使组件更具扩展性。
假设我们想开发一个弹出式插件。有不同类型的弹出窗口:普通邮件提醒,错误提醒,每次提醒显示了不同的方式。这是一个典型的多维度变化的场景。首先,我们定义了两类:普通窗口消息和错误信息窗口。
函数的MessageDialog(动画){
this.animation =动画;
}
(MessageDialog.prototype.show函数){
This.animation.show();
}
功能errordialog(动画){
this.animation =动画;
}
(errordialog.prototype.show =功能){
This.animation.show();
}
这两个类是前面提到的抽象部分,也就是抽象类的扩展,它们都包含成员动画。
这两种弹出窗口都是由show方法显示的,但是显示的动画效果是不同的,我们定义了两种类型的显示效果如下:
功能lineranimation(){
}
(lineranimation.prototype.show =功能){
console.log(这是班轮);
}
功能easeanimation(){
}
(easeanimation.prototype.show =功能){
console.log(容易);
}
这两个类是特定的实现类,实现特定的显示效果,我们如何调用它
VaR信息=新messagedialog(新lineranimation());
Message.show();
VaR误差=新errordialog(新easeanimation());
Error.show();
如果我们想添加一个动画效果,我们可以重新定义一个可以引入的效果类。
总结
学习桥接模式的关键是理解抽象和实现部分分离,使两者都可以独立地变化而不必停留在形式。的JS插件的灵活变化和多变的情况下使用这种模式是非常合适的。使用桥接模式的最重要的事情是找到系统中变化的不同维度。
(1)桥接模式的优点:
分离抽象和实现有助于独立管理软件组件。
(2)桥接模式的缺点:
每一个网桥元素的使用增加了一个函数调用,这对应用程序的性能有一定的负面影响,提高了系统的复杂度,如果用桥接函数连接两个函数,函数不称为桥接函数以外,那么这个桥函数既不必要,也不必要。
桥接模式与实现的抽象,使两将改变独立。它可以促进代码的模块化,便于更简洁的实现,提高了抽象的灵活性。它可以用来连接一组类的功能,并提供了一种方法,通过一个特殊功能意味着访问私人数据。