Swift-橋接模式(Bridge Pattern)

橋接模式

  1. 橋接模式的目的是把抽象層次結(jié)構(gòu)從其實(shí)現(xiàn)中分離出來,使其能夠獨(dú)立變更乘碑。
  2. 抽象層定義了供客戶端使用的上層的抽象接口挖息。實(shí)現(xiàn)層次結(jié)構(gòu)定義了抽象層次使用的底層接口。
  3. 實(shí)現(xiàn)類的引用被封裝于抽象層的實(shí)例中兽肤,橋接就形成了套腹。

適用性

  1. 不想在抽象與其實(shí)現(xiàn)之間形成固定的綁定關(guān)系(這樣就能在運(yùn)行時(shí)切換實(shí)現(xiàn))
  2. 抽象及其實(shí)現(xiàn)都應(yīng)可以通過子類化獨(dú)立進(jìn)行擴(kuò)展
  3. 對抽象的實(shí)現(xiàn)進(jìn)行修改不應(yīng)影響客戶端代碼
  4. 如果每個(gè)實(shí)現(xiàn)需要額外的子類以細(xì)化抽象绪抛,則說明有必要把它們分成兩個(gè)部分
  5. 想在帶有不同抽象接口的多個(gè)對象之間共享一個(gè)實(shí)現(xiàn)

橋接模式的優(yōu)點(diǎn):

  1. 橋接模式使用聚合關(guān)系,解耦了抽象和實(shí)現(xiàn)之間固有的綁定關(guān)系电禀,使得抽象和實(shí)現(xiàn)可以沿著各自的維度來變化
  2. 提高了系統(tǒng)的可擴(kuò)展性幢码,可以獨(dú)立地對抽象部分和實(shí)現(xiàn)部分進(jìn)行擴(kuò)展
  3. 可減少子類的個(gè)數(shù),這個(gè)在前面講手機(jī)示例的時(shí)候進(jìn)行分析了
  4. 實(shí)現(xiàn)細(xì)節(jié)對客戶透明尖飞,可以對用戶隱藏實(shí)現(xiàn)細(xì)節(jié)

橋接模式的缺點(diǎn):

  1. 橋接模式的引入會增加系統(tǒng)的理解與設(shè)計(jì)難度症副,由于聚合關(guān)系建立在抽象層,要求開發(fā)者針對抽象進(jìn)行設(shè)計(jì)與編程
  2. 橋接模式要求正確識別出系統(tǒng)中兩個(gè)獨(dú)立變化的維度政基,因此其使用范圍具有一定的局限性

Example

protocol Switch {
    var appliance: Appliance {get set}
    func turnOn()
}

protocol Appliance {
    func run()
}

class RemoteControl: Switch {
    var appliance: Appliance

    func turnOn() {
        self.appliance.run()
    }
    
    init(appliance: Appliance) {
        self.appliance = appliance
    }
}

class TV: Appliance {
    func run() {
        print("tv turned on");
    }
}

class VacuumCleaner: Appliance {
    func run() {
        print("vacuum cleaner turned on")
    }
}

var tvRemoteControl = RemoteControl(appliance: TV())
tvRemoteControl.turnOn()

var fancyVacuumCleanerRemoteControl = RemoteControl(appliance: VacuumCleaner())
fancyVacuumCleanerRemoteControl.turnOn()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贞铣,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子沮明,更是在濱河造成了極大的恐慌辕坝,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件珊擂,死亡現(xiàn)場離奇詭異圣勒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)摧扇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門圣贸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扛稽,你說我怎么就攤上這事吁峻。” “怎么了在张?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵用含,是天一觀的道長。 經(jīng)常有香客問我帮匾,道長啄骇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任瘟斜,我火速辦了婚禮缸夹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘螺句。我一直安慰自己虽惭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布蛇尚。 她就那樣靜靜地躺著芽唇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪取劫。 梳的紋絲不亂的頭發(fā)上匆笤,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天研侣,我揣著相機(jī)與錄音,去河邊找鬼疚膊。 笑死义辕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的寓盗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼璧函,長吁一口氣:“原來是場噩夢啊……” “哼傀蚌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蘸吓,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤善炫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后库继,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體箩艺,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年宪萄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了代兵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞬痘。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惶我,到底是詐尸還是另有隱情,我是刑警寧澤界逛,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布躯喇,位于F島的核電站,受9級特大地震影響侠碧,放射性物質(zhì)發(fā)生泄漏抹估。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一弄兜、第九天 我趴在偏房一處隱蔽的房頂上張望药蜻。 院中可真熱鬧,春花似錦挨队、人聲如沸谷暮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽湿弦。三九已至,卻和暖如春腾夯,著一層夾襖步出監(jiān)牢的瞬間颊埃,已是汗流浹背蔬充。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留班利,地道東北人饥漫。 一個(gè)月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像罗标,于是被迫代替她去往敵國和親庸队。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

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

  • 1 場景問題# 1.1 發(fā)送提示消息## 考慮這樣一個(gè)實(shí)際的業(yè)務(wù)功能:發(fā)送提示消息闯割〕瓜基本上所有帶業(yè)務(wù)流程處理的系統(tǒng)...
    七寸知架構(gòu)閱讀 5,009評論 5 63
  • 在正式介紹橋接模式之前,我先跟大家談?wù)剝煞N常見文具的區(qū)別宙拉,它們是毛筆和蠟筆宾尚。假如我們需要大中小3種型號的畫筆,能夠...
    justCode_閱讀 1,769評論 0 7
  • 設(shè)計(jì)模式匯總 一谢澈、基礎(chǔ)知識 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用煌贴、多...
    MinoyJet閱讀 3,947評論 1 15
  • 設(shè)計(jì)模式基本原則 開放-封閉原則(OCP),是說軟件實(shí)體(類锥忿、模塊牛郑、函數(shù)等等)應(yīng)該可以拓展,但是不可修改缎谷。開-閉原...
    西山薄涼閱讀 3,798評論 3 14
  • Iterator模式 (迭代器) 一個(gè)一個(gè)遍歷 一個(gè)集合類可以遵守 Iterator 協(xié)議井濒,并實(shí)現(xiàn)一個(gè) Itera...
    SSBun閱讀 1,843評論 0 15