Swift-橋接模式(Bridge Pattern)

橋接模式

  1. 橋接模式的目的是把抽象層次結構從其實現中分離出來,使其能夠獨立變更。
  2. 抽象層定義了供客戶端使用的上層的抽象接口。實現層次結構定義了抽象層次使用的底層接口。
  3. 實現類的引用被封裝于抽象層的實例中,橋接就形成了。

適用性

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

橋接模式的優點:

  1. 橋接模式使用聚合關系,解耦了抽象和實現之間固有的綁定關系,使得抽象和實現可以沿著各自的維度來變化
  2. 提高了系統的可擴展性,可以獨立地對抽象部分和實現部分進行擴展
  3. 可減少子類的個數,這個在前面講手機示例的時候進行分析了
  4. 實現細節對客戶透明,可以對用戶隱藏實現細節

橋接模式的缺點:

  1. 橋接模式的引入會增加系統的理解與設計難度,由于聚合關系建立在抽象層,要求開發者針對抽象進行設計與編程
  2. 橋接模式要求正確識別出系統中兩個獨立變化的維度,因此其使用范圍具有一定的局限性

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1 場景問題# 1.1 發送提示消息## 考慮這樣一個實際的業務功能:發送提示消息。基本上所有帶業務流程處理的系統...
    七寸知架構閱讀 5,101評論 5 63
  • 在正式介紹橋接模式之前,我先跟大家談談兩種常見文具的區別,它們是毛筆和蠟筆。假如我們需要大中小3種型號的畫筆,能夠...
    justCode_閱讀 1,800評論 0 7
  • 設計模式匯總 一、基礎知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用、多...
    MinoyJet閱讀 3,979評論 1 15
  • 設計模式基本原則 開放-封閉原則(OCP),是說軟件實體(類、模塊、函數等等)應該可以拓展,但是不可修改。開-閉原...
    西山薄涼閱讀 3,880評論 3 14
  • Iterator模式 (迭代器) 一個一個遍歷 一個集合類可以遵守 Iterator 協議,并實現一個 Itera...
    SSBun閱讀 1,869評論 0 15