設(shè)計(jì)模式j(luò)s篇--橋接模式

一、定義

通過提供抽象化和現(xiàn)實(shí)化之間的橋接結(jié)構(gòu)俺驶,實(shí)現(xiàn)二者的解耦。
2個(gè)角色:
(1)擴(kuò)充抽象類
(2)具體實(shí)現(xiàn)類

二、舉例

eg1: github上面原有的例子(https://github.com/sohamkamani/javascript-design-patterns-for-humans#-bridge)票从。

// 場(chǎng)景:更換主題
// About Careers是兩個(gè)抽象類,都有自己的主題成員
class About{ 
    constructor(theme) {
        this.theme = theme
    }    
    getContent() {
        return "About page in " + this.theme.getColor()
    }
}
class Careers{
   constructor(theme) {
       this.theme = theme
   } 
   getContent() {
       return "Careers page in " + this.theme.getColor()
   } 
}
// DarkTheme LightTheme AquaTheme是具體實(shí)現(xiàn)類滨嘱,不同的主題有不同的效果
class DarkTheme{
    getColor() {
        return 'Dark Black'
    }
}
class LightTheme{
    getColor() {
        return 'Off white'
    }
}
class AquaTheme{
    getColor() {
        return 'Light blue'
    }
}
// 調(diào)用
const darkTheme = new DarkTheme()
const about = new About(darkTheme)
const careers = new Careers(darkTheme)
console.log(about.getContent() )// "About page in Dark Black"
console.log(careers.getContent() )// "Careers page in Dark Black"

eg2:事件監(jiān)聽

/*
 點(diǎn)擊事件獲取數(shù)據(jù)
 弊端:該函數(shù)直接使用this.id,只能工作在瀏覽器中峰鄙,如果要對(duì)這個(gè)API函數(shù)做單元測(cè)試,或在命令行環(huán)境中執(zhí)行它太雨,是非常不方便的
*/
getData () {
   api.fetchCompanyWalletApi({id: this.id}).then(data => {
        // do sth
   })
}
/*
1吟榴、將id作為參數(shù)傳遞
2、用橋接模式把抽象隔離開來
好處:拓寬了適用范圍囊扳,因?yàn)楝F(xiàn)在getData 并沒有和事件對(duì)象捆綁在一起吩翻,只需要提供一個(gè)ID就可以在單元測(cè)試中運(yùn)行這個(gè)API。此外锥咸,也可以在命令行環(huán)境中對(duì)這個(gè)接口進(jìn)行快速測(cè)試狭瞎。
*/
getData (id) {
   api.fetchCompanyWalletApi({id: id}).then(data => {
       // do sth
   })
}
// 綁定事件
function getDataBridge(){
      getData (this.id);
}

eg3:連接公開的API代碼和私用實(shí)現(xiàn)的代碼

let Student = function () {
  // 私有變量
  let name = 'aa';
  // getName 訪問私用成員變量 name(特權(quán)函數(shù))
  this.getName = function () {
    return name;
  }
  // 私有方法
  let getAge = function ()  {
    // do sth
    return 1;
  }
// getAgeBridge 訪問私用方法 name(特權(quán)函數(shù))
  this.getAgeBridge = function () {
      return getAge ()
  }
}
let student = new Student()
student.getName()
student.getAgeBridge()

eg3:橋接模式聯(lián)合幾個(gè)類

const Fn1 = function(a) {
  // dosomething...  
}
const Fn2 = function(b) {
  // dosomething...
}
const Bridge = function(a, b){
  this.one = new Fn1(a)
  this.two = new Fn2(b)
}
三、總結(jié)

優(yōu)點(diǎn):
分離接口和實(shí)現(xiàn)部分
提供可擴(kuò)展性
實(shí)現(xiàn)細(xì)節(jié)對(duì)客戶透明搏予,可以對(duì)客戶隱藏實(shí)現(xiàn)細(xì)節(jié)

缺點(diǎn):
大量的類將導(dǎo)致開發(fā)成本增加脚作,同時(shí)在性能方面可能也會(huì)有所降低

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子球涛,更是在濱河造成了極大的恐慌劣针,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亿扁,死亡現(xiàn)場(chǎng)離奇詭異捺典,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)从祝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門襟己,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人牍陌,你說我怎么就攤上這事擎浴。” “怎么了毒涧?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵贮预,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我契讲,道長(zhǎng)仿吞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任捡偏,我火速辦了婚禮唤冈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘银伟。我一直安慰自己你虹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布彤避。 她就那樣靜靜地躺著售葡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忠藤。 梳的紋絲不亂的頭發(fā)上挟伙,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音模孩,去河邊找鬼尖阔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛榨咐,可吹牛的內(nèi)容都是我干的介却。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼块茁,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼齿坷!你這毒婦竟也來了桂肌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤永淌,失蹤者是張志新(化名)和其女友劉穎崎场,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遂蛀,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谭跨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了李滴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片螃宙。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖所坯,靈堂內(nèi)的尸體忽然破棺而出谆扎,到底是詐尸還是另有隱情,我是刑警寧澤芹助,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布堂湖,位于F島的核電站,受9級(jí)特大地震影響周瞎,放射性物質(zhì)發(fā)生泄漏苗缩。R本人自食惡果不足惜饵蒂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一声诸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧退盯,春花似錦彼乌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至琉朽,卻和暖如春毒租,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背箱叁。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工墅垮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耕漱。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓算色,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親螟够。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灾梦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫峡钓、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評(píng)論 4 62
  • 在偶像劇里談現(xiàn)實(shí),這好像有點(diǎn)不太現(xiàn)實(shí)牡肉。你可以高仿經(jīng)典也可以玩瑪麗蘇捧灰,但是主角不鮮還辣眼,內(nèi)容不甜還作妖统锤,那就很對(duì)不...
    特立獨(dú)行的MissK閱讀 3,783評(píng)論 0 2
  • 我不太愛說話,與人在一起交談逾雄,一般都是別人說我聽阀溶。時(shí)間一長(zhǎng),發(fā)現(xiàn)聽別人說也是一件蠻有趣的事情鸦泳。 作為一個(gè)聽者银锻,最喜...
    彼岸很美閱讀 4,001評(píng)論 3 10
  • 嗨,朋友們?cè)绨沧鲇ィ∮质怯幸恢艿拈_始击纬。上周你的任務(wù)清單完成的怎樣呢?上一周都干了啥钾麸? 1.靜靜沒有夜生活 基本上都...
    溯本源閱讀 620評(píng)論 0 0
  • 一直渴求一個(gè)突破口更振,沖出隱形的避障,卻難以逃脫被裹挾著進(jìn)入洪流的命運(yùn)饭尝,昏昏沉沉的嘈雜中肯腕,不知未來何方 身邊的事物不...
    衡七_(dá)2閱讀 116評(píng)論 0 0