JS設(shè)計模式---7.橋接模式

適用場合及栗子

  • 事件監(jiān)聽器

假設(shè)有一個名為getBeerById的API函數(shù)。它根據(jù)一個標(biāo)識符返回有關(guān)某種啤酒的信息。我們來給一個事件監(jiān)聽用戶操作

    //bad
    addEvent(Element,'click',getBeerById)
    function getBeerById(e){
      // 事件對象被作為參數(shù)傳遞給函數(shù),而本例并沒有使用這個參數(shù),只是從this對象中獲取id
      var id = this.id;
      asyncRequest('GET',`beer.uri?id=${id}`,function (res) {
         console.log(`Request Beer:${res.responseText}`)  
      }) 
    }
    // good
    function getBeerById(id,callback) {
      asyncRequest('GET',`beer.uri?id=${id}`,function (res) {
        // 回調(diào) 傳入返回值
        callback(res.responseText)
      }) 
    }
    addEvent(Element,'click',getBeerByIdBridge)
    function getBeerByIdBridge(e){
      // 把id作為參數(shù)傳遞給getBeerById函數(shù)是合情合理的,這里使用一個回調(diào)函數(shù)把回應(yīng)結(jié)果返回 現(xiàn)在我們將針對接口而不是實現(xiàn)進(jìn)行編程 
      getBeerById(this.id,function (beer) {
        console.log(`Request Beer:${res.responseText}`)
      })
    }

我們用了兩種方式來實現(xiàn),第一種方式把事件對象與getBeerById捆綁在一起,那么它只在本次事件中適用。第二種方式使用橋接模式把抽象隔離開來后,getBeerById 函數(shù)不再和事件對象捆綁在一起,也就擴(kuò)大了它的適用范圍

  • 特權(quán)函數(shù)
  var Public = function () {
     var secret = 3;
     this.privilegedGetter = function () {
       return secret
     }
   }
   var o = new Public();
   var data = o.privilegedGetter();

利用橋接函數(shù)來實現(xiàn)公共成員對私有成員的訪問和操作 詳見封裝

  • 連接多個類
  var class1 = function (a,b,c) {
    this.a = a;
    this.b = b;
    this.c = c;
  }
  var class2 = function (d) {
    this.d = d
  }
  var BridgeClass = function (a,b,c,d) {
    this.one = new class1(a,b,c);
    this.two = new clsaa2(d);
  }

這看起來很像適配器,但是本例中實際上并沒有客戶系統(tǒng)要求提供數(shù)據(jù),它只不過是用來接納數(shù)據(jù)并轉(zhuǎn)發(fā)給責(zé)任方的一種輔助性手段。
有人可能會覺得這個橋接類實際上就是一個門面類。但是這里與門面類不同,使用橋接模式是為了讓class1和class2能夠獨(dú)立于BrigeClass而發(fā)生改變。

總結(jié)

橋接模式主要的作用是將抽象與其實現(xiàn)隔離開來,以便二者獨(dú)立變化,互不影響。
橋接模式的好處就在于能夠獨(dú)立管理你項目的各個組成部分,可以促進(jìn)代碼的模塊化,促成更簡潔的實現(xiàn)并提高抽象的靈活性。
只有某一處調(diào)用的函數(shù)如果用橋接的話,代碼就會變得累贅了。而且增加了函數(shù)的調(diào)用,可能會對性能造成一些影響。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 設(shè)計模式概述 在學(xué)習(xí)面向?qū)ο笃叽笤O(shè)計原則時需要注意以下幾點(diǎn):a) 高內(nèi)聚、低耦合和單一職能的“沖突”實際上,這兩者...
    彥幀閱讀 3,890評論 0 14
  • 設(shè)計模式匯總 一、基礎(chǔ)知識 1. 設(shè)計模式概述 定義:設(shè)計模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 4,094評論 1 15
  • 本文旨在快速梳理常用的設(shè)計模式,了解每個模式主要針對的是哪些情況以及其基礎(chǔ)特征,每個模式前都有列舉出一個或多個可以...
    蠻三刀醬閱讀 1,904評論 0 1
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,666評論 1 32
  • 隨筆1 我聽著情歌懷念你,總有那么幾句說進(jìn)我心里, 回憶與歌曲的畫面重疊著,好似你笑著對我說你也在想我, 淚在眼眶...
    喪_半日仙閱讀 208評論 0 0

友情鏈接更多精彩內(nèi)容