Javascript设计模式理论与实战:桥接模式

桥接模式将抽象部分与实现部分分离开来,使两者都可以独立的变化,并且可以一起和谐地工作。抽象部分和实现部分都可以独立的变化而不会互相影响,降低了代码的耦合性,提高了代码的扩展性。

基本理论

桥接模式定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
桥接模式主要有4个角色组成:
(1)抽象类
(2)扩充抽象类
(3)实现类接口
(4)具体实现类
根据javascript语言的特点,我们将其简化成2个角色:
(1)扩充抽象类
(2)具体实现类
怎么去理解桥接模式呢?我们接下来举例说明

桥接模式的实现

理解桥接模式的思想,关键是要理解其分离抽象部分和实现部分的思想。我们举例进行说明

最简单的桥接模式

其实我们最经常用的jQuery的each函数就是一个典型的桥接模式,我们模拟其实现如下:


  1. var each = function (arr, fn) { 
  2.     for (var i = 0; i < arr.length; i++) { 
  3.         var val = arr[i]; 
  4.         if (fn.call(val, i, val, arr)) { 
  5.             return false; 
  6.         } 
  7.     } 
  8. var arr = [1, 2, 3, 4]; 
  9. each(arr, function (i, v) { 
  10.     arr[i] = v * 2; 
  11. }) 

在这个例子中,我们通过each函数循环了arr数组,别看这个例子很常见,但其中就包含了典型的桥接模式。

在这个例子中,抽象部分是each函数,也就是上面说的扩充抽象类,实现部分是fn,即具体实现类。抽象部分和实现部分可以独立的进行变化。这个例子虽然简单,但就是一个典型的桥接模式的应用。

插件开发中的桥接模式

桥接模式的一个适用场景是组件开发。我们平时开发组件为了适应不同场合,组件相应的会有许多不同维度的变化。桥接模式就可以应用于此,将其抽象与实现分离,使组件的扩展性更高。
假设我们要开发一个弹窗插件,弹窗有不同的类型:普通消息提醒,错误提醒,每一种提醒的展示方式还都不一样。这是一个典型的多维度变化的场景。首先我们定义两个类:普通消息弹窗和错误消息弹窗。


  1. function MessageDialog(animation) { 
  2.     this.animation = animation; 
  3. MessageDialog.prototype.show = function () { 
  4.     this.animation.show(); 
  5. function ErrorDialog(animation) { 
  6.     this.animation = animation; 
  7. ErrorDialog.prototype.show = function () { 
  8.     this.animation.show(); 

这两个类就是前面提到的抽象部分,也就是扩充抽象类,它们都包含一个成员animation。

两种弹窗通过show方法进行显示,但是显示的动画效果不同。我们定义两种显示的效果类如下:


  1. function LinerAnimation() { 
  2. LinerAnimation.prototype.show = function () { 
  3.     console.log("it is liner"); 
  4. function EaseAnimation() { 
  5. EaseAnimation.prototype.show = function () { 
  6.     console.log("it is ease"); 

这两个类就是具体实现类,它们实现具体的显示效果。那我们如何调用呢?

1 var message = new MessageDialog(new LinerAnimation());
2 message.show();
3 var error = new ErrorDialog(new EaseAnimation());
4 error.show();

如果我们要增加一种动画效果,可以再定义一种效果类,传入即可。

总结

学习桥接模式关键是要理解抽象部分与实现部分的分离,使得二者可以独立的变化,而不必拘泥于形式。JS插件灵活的变化,适用场景的多变就非常适合使用这种模式来实现。使用桥接模式最重要的是要找出系统中不同的变化维度。

作者:狼狼的蓝胖子

来源:51CTO

时间: 2024-10-26 05:31:27

Javascript设计模式理论与实战:桥接模式的相关文章

详解JavaScript设计模式开发中的桥接模式使用_基础知识

桥接模式将抽象部分与实现部分分离开来,使两者都可以独立的变化,并且可以一起和谐地工作.抽象部分和实现部分都可以独立的变化而不会互相影响,降低了代码的耦合性,提高了代码的扩展性. 按照GoF的定义,桥接模式的作用在于"将抽象与其实现隔离开来,以便二者独立变化".这种模式对于Javascript中常见的事件驱动的编程大有裨益. 桥接模式最常见和实际的应用场合之一是事件监听器回调函数. example:事件监听器,把事件处理的语句封装到回调函数中,通过接口而不是实现进行编程. 基本理论 桥接

Javascript设计模式理论与实战:简单工厂模式

通常我们创建对象最常规的方法就是使用new关键字调用构造函数,这会导致对象之间的依赖性.工厂模式是一种有助于消除类之间依赖性的设计模式,它使用一个方法来决定要实例化哪一个类.本文详细介绍了简单工厂模式的理论,并且举例说明了简单工厂模式的具体应用. 基本介绍 简单工厂模式是工厂模式中最基本的一种.通过定义一个工厂类,根据参数实例化具体的某个产品类. 举例说明 我们举个例子进行说明:假设我们开发一个旅游行业网站,网站上面销售机票,酒店等产品.一个用户准备购买一张机票.我们可以定义相关类如下: var

Javascript设计模式理论与实战:观察者模式

观察者模式主要应用于对象之间一对多的依赖关系,当一个对象发生改变时,多个对该对象有依赖的其他对象也会跟着做出相应改变,这就非常适合用观察者模式来实现.使用观察者模式可以根据需要增加或删除对象,解决一对多对象间的耦合关系,使程序更易于扩展和维护. 基础知识 观察者模式定义了对象间的一种一对多依赖关系,每当一个对象发生改变时,其相关依赖对象皆得到通知并被进行相应的改变.观察者模式又叫做发布-订阅 模式.生活中有很多类似的关系,比如微信公众号订阅,多个读者订阅一个微信公众号,一旦公众号有更新,多个读者

javascript设计模式理论和示例深入分析(上)

                              此文详细剖析的设计模式理论,特别是原型设计模式,帮助在遇到实际项目中提供理论指导和分析.      虽然 Object 构造函数或对象字面量都可以用来创建单个对象,但这些方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码.为解决这个问题,人们开始使用工厂模式的一种变体. 6.2.1 工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程 , 考虑到在 ECMAScript 中无法创建类

【自然框架】——页面基类与设计模式(一)桥接模式(11.14补充了一段对桥接模式的理解)

  [自然框架] 页面里的父类-- (补充) [自然框架] 页面里的父类--把共用的东东都交给父类,让子类专注于其他.   ===================   以前发过两篇关于页面基类的文章,由于当时对于聚合.组合.桥接模式等不清楚,所以说的也是比较乱,这些日子又学习了一下程杰的<大话设计模式>,又有不少收获.现在我们再来重新分析一下.   先说需求:1. 对于MIS来说,大多数页面都需要验证一下访问者是否已经登录,是否有权限访问页面,是否有权限操作指定的记录. 2. 对于自然框架来说

Java设计模式(十)----桥接模式

桥接模式 (Bridge) 一.定义 二.结构 三.具体案例 1.传统方法 2.使用桥接模式 四.应用场景 一.定义 将抽象部分与实现(行为)部分分离,使它们都可以独立的变化. 桥接模式的做法是把变化部分(实现)抽象出来,使变化部分与主类(抽象)分离开来,从而将多个维度的变化彻底分离.最后,提供一个管理类(如下面的引擎类)来组合不同维度上的变化,通过这种组合来满足业务的需要. 二.结构 图-桥接模式结构图 三.具体案例 本案例是实现汽车安装引擎的功能 汽车有两种 奔驰和宝马 他们安装的引擎不同

设计模式详解之桥接模式

桥接模式(Bridge):桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化.桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了.我们来看看关系图: 实现代码: 先定义接口: public interface Sourceable { p

Javascript设计模式理论与编程实战之简单工厂模式_javascript技巧

阅读目录 基本介绍 举例说明 总结说明 简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料机,要咖啡还是牛奶取决于你按哪个按钮. 简单工厂模式在创建ajax对象的时候也非常有用. 通常我们创建对象最常规的方法就是使用new关键字调用构造函数,这会导致对象之间的依赖性.工厂模式是一种有助于消除类之间依赖性的设计模式,它使用一个方法来决定要实例化哪一个

重温设计模式(二)——桥接模式(Bridge)

一.从树谈起 基本上所有人都知道树这个概念. 稍微深究.NET本质的人会懂得,.NET有个对象树. 学习ASP.NET的人肯定会知道,Web上有个控件树. 哪怕是只学习过数据结构应付考试的大学生也会知道Tree这个概念. 二.把需求扩展成树 举个我们最常用的Photoshop做例子. 在Photoshop中,有许多图形工具,比如星星,比如方形,再比如圆形等等. 在Photoshop中,不用多说,也有很多种颜色供我们选择. 于是就产生了,红色的星星,绿色的星星.红色的方形,绿色的方形等等. 看看所