最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解JavaScript設(shè)計模式開發(fā)中的橋接模式使用

 更新時間:2016年05月18日 10:25:17   作者:狼狼的藍(lán)胖子  
橋接模式的適用場合非常廣泛,除了在事件回調(diào)函數(shù)與接口之間進(jìn)行橋接外,橋接模式也可以用于連接公開的API代碼和私用的實現(xiàn)代碼,下面我們就來詳解JavaScript設(shè)計模式開發(fā)中的橋接模式使用

橋接模式將抽象部分與實現(xiàn)部分分離開來,使兩者都可以獨立的變化,并且可以一起和諧地工作。抽象部分和實現(xiàn)部分都可以獨立的變化而不會互相影響,降低了代碼的耦合性,提高了代碼的擴(kuò)展性。
按照GoF的定義,橋接模式的作用在于“將抽象與其實現(xiàn)隔離開來,以便二者獨立變化”。這種模式對于Javascript中常見的事件驅(qū)動的編程大有裨益。

橋接模式最常見和實際的應(yīng)用場合之一是事件監(jiān)聽器回調(diào)函數(shù)。 example:事件監(jiān)聽器,把事件處理的語句封裝到回調(diào)函數(shù)中,通過接口而不是實現(xiàn)進(jìn)行編程。

基本理論

橋接模式定義:將抽象部分與它的實現(xiàn)部分分離,使它們都可以獨立地變化。
橋接模式主要有4個角色組成:
(1)抽象類
(2)擴(kuò)充抽象類
(3)實現(xiàn)類接口
(4)具體實現(xiàn)類
根據(jù)javascript語言的特點,我們將其簡化成2個角色:
(1)擴(kuò)充抽象類
(2)具體實現(xiàn)類
怎么去理解橋接模式呢?我們接下來舉例說明

橋接模式的實現(xiàn)

理解橋接模式的思想,關(guān)鍵是要理解其分離抽象部分和實現(xiàn)部分的思想。我們舉例進(jìn)行說明

最簡單的橋接模式

其實我們最經(jīng)常用的jQuery的each函數(shù)就是一個典型的橋接模式,我們模擬其實現(xiàn)如下:

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

在這個例子中,我們通過each函數(shù)循環(huán)了arr數(shù)組,別看這個例子很常見,但其中就包含了典型的橋接模式。
在這個例子中,抽象部分是each函數(shù),也就是上面說的擴(kuò)充抽象類,實現(xiàn)部分是fn,即具體實現(xiàn)類。抽象部分和實現(xiàn)部分可以獨立的進(jìn)行變化。這個例子雖然簡單,但就是一個典型的橋接模式的應(yīng)用。

插件開發(fā)中的橋接模式

橋接模式的一個適用場景是組件開發(fā)。我們平時開發(fā)組件為了適應(yīng)不同場合,組件相應(yīng)的會有許多不同維度的變化。橋接模式就可以應(yīng)用于此,將其抽象與實現(xiàn)分離,使組件的擴(kuò)展性更高。
假設(shè)我們要開發(fā)一個彈窗插件,彈窗有不同的類型:普通消息提醒,錯誤提醒,每一種提醒的展示方式還都不一樣。這是一個典型的多維度變化的場景。首先我們定義兩個類:普通消息彈窗和錯誤消息彈窗。

function MessageDialog(animation) {
  this.animation = animation;
}
MessageDialog.prototype.show = function () {
  this.animation.show();
}
function ErrorDialog(animation) {
  this.animation = animation;
}
ErrorDialog.prototype.show = function () {
  this.animation.show();
}

這兩個類就是前面提到的抽象部分,也就是擴(kuò)充抽象類,它們都包含一個成員animation。
兩種彈窗通過show方法進(jìn)行顯示,但是顯示的動畫效果不同。我們定義兩種顯示的效果類如下:

function LinerAnimation() {
}
LinerAnimation.prototype.show = function () {
  console.log("it is liner");
}
function EaseAnimation() {
}
EaseAnimation.prototype.show = function () {
  console.log("it is ease");
}

這兩個類就是具體實現(xiàn)類,它們實現(xiàn)具體的顯示效果。那我們?nèi)绾握{(diào)用呢?

var message = new MessageDialog(new LinerAnimation());
message.show();
var error = new ErrorDialog(new EaseAnimation());
error.show();

如果我們要增加一種動畫效果,可以再定義一種效果類,傳入即可。

總結(jié)

學(xué)習(xí)橋接模式關(guān)鍵是要理解抽象部分與實現(xiàn)部分的分離,使得二者可以獨立的變化,而不必拘泥于形式。JS插件靈活的變化,適用場景的多變就非常適合使用這種模式來實現(xiàn)。使用橋接模式最重要的是要找出系統(tǒng)中不同的變化維度。
(1)橋接模式優(yōu)點:
把抽象與實現(xiàn)隔離開,有助于獨立地管理軟件的各組成部分。
(2)橋接模式缺點:
每使用一個橋接元素都要增加一次函數(shù)調(diào)用,這對應(yīng)用程序的性能會有一些負(fù)面影響。提高了系統(tǒng)的復(fù)雜程度。如果一個橋接函數(shù)被用于連接兩個函數(shù),而其中某個函數(shù)根本不會在橋接函數(shù)之外被調(diào)用,那么此時這個橋接函數(shù)就不是非要不可的。
橋接模式“將抽象與實現(xiàn)隔離開來,以便二者獨立變化”。它可以促進(jìn)代碼的模塊化、促成更簡潔的實現(xiàn)并提高抽象的靈活性。它可以用來把一組類和函數(shù)連接起來,而且提供了一種借助于特權(quán)函數(shù)訪問私用數(shù)據(jù)的手段。

相關(guān)文章

  • JavaScript核心語法總結(jié)(推薦)

    JavaScript核心語法總結(jié)(推薦)

    下面小編就為大家?guī)硪黄狫avaScript核心語法總結(jié)(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • javascript獲取函數(shù)名稱、函數(shù)參數(shù)、對象屬性名稱的代碼實例

    javascript獲取函數(shù)名稱、函數(shù)參數(shù)、對象屬性名稱的代碼實例

    這篇文章主要介紹了javascript獲取函數(shù)名稱、函數(shù)參數(shù)、對象屬性的代碼實例,需要的朋友可以參考下
    2014-04-04
  • 關(guān)于javascript中的typeof和instanceof介紹

    關(guān)于javascript中的typeof和instanceof介紹

    typeof用來檢測給定變量的數(shù)據(jù)類型 instanceof用來檢測對象的類型
    2012-12-12
  • js 數(shù)組操作代碼集錦

    js 數(shù)組操作代碼集錦

    用js有很久了,但都沒有深究過js的數(shù)組形式。偶爾用用也就是簡單的string.split(char)。
    2009-04-04
  • 溫故知新——JavaScript中的字符串連接問題最全總結(jié)(推薦)

    溫故知新——JavaScript中的字符串連接問題最全總結(jié)(推薦)

    這篇文章主要介紹了JS中的字符串連接問題,ECMAScript 中最常見的一個問題是字符串連接的性能。在調(diào)用 join() 方法時才會發(fā)生連接操作,具體操作步驟大家可查看下文的詳細(xì)講解,感興趣的小伙伴們可以參考一下。
    2017-08-08
  • JavaScript中的原型prototype完全解析

    JavaScript中的原型prototype完全解析

    這篇文章主要介紹了JavaScript中的原型prototype完全解析,prototype可是js界"一切皆對象"論調(diào)的重要支撐,講解了__proto__屬性和原型鏈等干貨,需要的朋友可以參考下
    2016-05-05
  • caller和callee的區(qū)別介紹及演示結(jié)果

    caller和callee的區(qū)別介紹及演示結(jié)果

    caller返回一個函數(shù)的引用,這個函數(shù)調(diào)用了當(dāng)前的函數(shù);callee放回正在執(zhí)行的函數(shù)本身的引用,它是arguments的一個屬性,感興趣的你可以參考下或許可以幫助到你
    2013-03-03
  • JS Attribute屬性操作詳解

    JS Attribute屬性操作詳解

    下面小編就為大家?guī)硪黄狫S Attribute屬性操作詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • JSONP跨域原理以及實現(xiàn)方法詳解

    JSONP跨域原理以及實現(xiàn)方法詳解

    由于瀏覽器同源策略的限制,非同源下的請求,都會產(chǎn)生跨域問題,jsonp即是為了解決這個問題出現(xiàn)的一種簡便解決方案,下面這篇文章主要給大家介紹了關(guān)于JSONP跨域原理以及實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • javascript運算符——位運算符全面介紹

    javascript運算符——位運算符全面介紹

    下面小編就為大家?guī)硪黄猨avascript運算符——位運算符全面介紹。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07

最新評論

勐海县| 遵义市| 贵阳市| 靖西县| 平山县| 获嘉县| 安塞县| 齐河县| 陆河县| 岫岩| 保德县| 义乌市| 晋宁县| 都江堰市| 金湖县| 桐城市| 新泰市| 珲春市| 蕲春县| 宜宾市| 龙山县| 冷水江市| 潮安县| 东宁县| 台东市| 黎平县| 富民县| 定远县| 浪卡子县| 筠连县| 承德市| 资中县| 开原市| 仁怀市| 临江市| 阳新县| 松桃| 嘉兴市| 修文县| 巍山| 庄河市|