当前位置: 首页 > 科技观察

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

时间:2023-03-12 11:58:56 科技观察

桥接模式将抽象部分和实现部分分开,使两者可以独立变化,又可以和谐地协同工作。抽象部分和实现部分可以独立更改,互不影响,降低了代码的耦合度,提高了代码的可扩展性。基本理论桥接模式定义:将抽象与其实现分开,以便它们都可以独立变化。桥接模式主要包含4个角色:(1)抽象类(2)扩展抽象类(3)实现类接口(4)具体实现类根据javascript语言的特点,我们将其简化为2个角色:(1)扩展抽象类(二)具体实现类如何理解桥接模式?下面以一个例子来说明桥接模式的实现。理解桥接模式思想的关键是理解抽象部分和实现部分分离的思想。下面举个例子来说明最简单的桥接模式。事实上,我们最常使用的jQuery的each函数就是一种典型的桥接模式。我们模拟它的实现如下:arr)){returnfalse;}}}vararr=[1,2,3,4];each(arr,function(i,v){arr[i]=v*2;})在这个例子中,我们循环通过每个函数的arr数组。这个例子虽然很普通,但是包含了一个典型的桥接模式。本例中,抽象部分为各个函数,即上述扩展抽象类,实现部分为fn,即具体实现类。抽象部分和实现部分可以独立更改。这个例子虽然简单,但却是桥接模式的典型应用。插件开发中的桥接模式桥接模式的一个适用场景是组件开发。我们通常开发组件是为了适应不同的场合,组件会相应地在很多不同的维度上发生变化。桥接模式可以应用于此,将其抽象与实现分离,使组件更具扩展性。假设我们要开发一个弹窗插件。弹窗有不同类型:一般消息提醒、错误提醒,每种提醒的显示方式不同。这是一个典型的多维变化场景。首先,我们定义了两个类:普通消息弹出窗口和错误消息弹出窗口。functionMessageDialog(动画){this.animation=动画;}MessageDialog.prototype.show=function(){this.animation.show();}functionErrorDialog(动画){this.animation=动画;}ErrorDialog.prototype.show=function(){this.animation.show();}这两个类就是上面说的抽象部分,即扩展抽象类,都包含一个成员animation。两个弹窗都是通过show方法显示出来的,但是显示出来的动画效果是不一样的。我们定义两个显示效果类如下:.log("itisease");}这两个类是具体的实现类,实现具体的显示效果。那我们怎么称呼呢?1varmessage=newMessageDialog(newLinerAnimation());2message.show();3varerror=newErrorDialog(newEaseAnimation());4error.show();如果我们要添加一个动画效果,我们可以再定义一个效果类,传入即可。不拘泥于形式。JS插件的灵活性和适用场景的多样性,非常适合这种模式来实现。使用桥梁模式最重要的是找出系统变化的不同维度。原文地址:http://luopq.com/2015/11/11/design-pattern-bridge/