橋接模式
- 橋接模式的目的是把抽象層次結構從其實現中分離出來,使其能夠獨立變更。
- 抽象層定義了供客戶端使用的上層的抽象接口。實現層次結構定義了抽象層次使用的底層接口。
- 實現類的引用被封裝于抽象層的實例中,橋接就形成了。
適用性
- 不想在抽象與其實現之間形成固定的綁定關系(這樣就能在運行時切換實現)
- 抽象及其實現都應可以通過子類化獨立進行擴展
- 對抽象的實現進行修改不應影響客戶端代碼
- 如果每個實現需要額外的子類以細化抽象,則說明有必要把它們分成兩個部分
- 想在帶有不同抽象接口的多個對象之間共享一個實現
橋接模式的優點:
- 橋接模式使用聚合關系,解耦了抽象和實現之間固有的綁定關系,使得抽象和實現可以沿著各自的維度來變化
- 提高了系統的可擴展性,可以獨立地對抽象部分和實現部分進行擴展
- 可減少子類的個數,這個在前面講手機示例的時候進行分析了
- 實現細節對客戶透明,可以對用戶隱藏實現細節
橋接模式的缺點:
- 橋接模式的引入會增加系統的理解與設計難度,由于聚合關系建立在抽象層,要求開發者針對抽象進行設計與編程
- 橋接模式要求正確識別出系統中兩個獨立變化的維度,因此其使用范圍具有一定的局限性
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()
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。