欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

基本理論

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

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

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

最簡(jiǎn)單的橋接模式

其實(shí)我們最經(jīng)常用的jQuery的each函數(shù)就是一個(gè)典型的橋接模式,我們模擬其實(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;
})

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

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

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

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();
}

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

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

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

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

如果我們要增加一種動(dòng)畫(huà)效果,可以再定義一種效果類(lèi),傳入即可。

總結(jié)

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

相關(guān)文章

  • 簡(jiǎn)述JavaScript的正則表達(dá)式中test()方法的使用

    簡(jiǎn)述JavaScript的正則表達(dá)式中test()方法的使用

    這篇文章主要介紹了簡(jiǎn)述JavaScript的正則表達(dá)式中test()方法的使用,是JS入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-06-06
  • 詳解JavaScript高級(jí)正則表達(dá)式

    詳解JavaScript高級(jí)正則表達(dá)式

    這篇文章主要為大家介紹了vue組件通信的幾種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • JavaScript中的函數(shù)嵌套使用

    JavaScript中的函數(shù)嵌套使用

    這篇文章主要介紹了JavaScript中的函數(shù)嵌套使用,是JavaScript入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-06-06
  • JavaScript展開(kāi)操作符(Spread operator)詳解

    JavaScript展開(kāi)操作符(Spread operator)詳解

    在本篇文章里小編給大家整理的是關(guān)于JavaScript展開(kāi)操作符(Spread operator)的詳細(xì)介紹以及用法,需要的讀者們參考下。
    2019-07-07
  • javascript中的原型鏈深入理解

    javascript中的原型鏈深入理解

    要弄清楚原型鏈就要先弄清楚 function 類(lèi)型,在javascript中沒(méi)有類(lèi)的概念,都是函數(shù),所以它是一門(mén)函數(shù)式的編程語(yǔ)言
    2014-02-02
  • 深入探討JavaScript String對(duì)象

    深入探討JavaScript String對(duì)象

    本文向大家詳細(xì)的介紹了javascript中的String對(duì)象的簡(jiǎn)介、定義方式、實(shí)例屬性和實(shí)例方法,非常的細(xì)致全面,這里推薦給大家,希望對(duì)大家能夠有所幫助。
    2015-03-03
  • JavaScript 詳解緩動(dòng)動(dòng)畫(huà)的封裝與使用

    JavaScript 詳解緩動(dòng)動(dòng)畫(huà)的封裝與使用

    緩動(dòng)動(dòng)畫(huà)原理:移動(dòng)的像素慢慢減少,讓效果看起來(lái)更柔和更美觀,通過(guò)定時(shí)器加回調(diào)函數(shù),實(shí)現(xiàn)動(dòng)畫(huà)效果以及更多具體功能,非常好用
    2021-11-11
  • 舉例詳解Python中smtplib模塊處理電子郵件的使用

    舉例詳解Python中smtplib模塊處理電子郵件的使用

    這篇文章主要介紹了舉例詳解Python中smtplib模塊處理電子郵件的使用,是Python入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-06-06
  • 淺談javascript回調(diào)函數(shù)

    淺談javascript回調(diào)函數(shù)

    回調(diào)函數(shù)是從一個(gè)叫函數(shù)式編程的編程范式中衍生出來(lái)的概念。簡(jiǎn)單來(lái)說(shuō),函數(shù)式編程就是使用函數(shù)作為變量。函數(shù)式編程過(guò)去 - 甚至是現(xiàn)在,依舊沒(méi)有被廣泛使用 - 它過(guò)去常被看做是那些受過(guò)特許訓(xùn)練的,大師級(jí)別的程序員的秘傳技巧。
    2014-12-12
  • 一篇文章讓你徹底弄懂JS的事件冒泡和事件捕獲

    一篇文章讓你徹底弄懂JS的事件冒泡和事件捕獲

    這篇文章主要介紹了一JS的事件冒泡和事件捕獲,通過(guò)代碼舉例詳細(xì)描述了兩者之間的差別,需要的朋友可以參考下
    2017-08-08

最新評(píng)論