Swift-橋接模式

weixin_34292287發表於2017-06-03

橋接模式定義將抽象部分與實現部分分離,使它們都可以獨立的變化.熟悉橋接模式之前需要了解兩個概念類的功能層次結構和類的實現層次結構.

類的功能實現層次結構是指如果在專案中新增功能,部分功能專案已經實現,通過新增子類繼承來實現新增功能,有可能出現類的層次過多的情況.

類的實現層次結構是指父類通過抽象方法定義介面,新增功能的時候新增抽象方法,子類負責實現具體的實現.

1048365-6b8a3ecde75781e6.png
橋接模式.png

抽象(Abstraction):定義抽象介面,該介面中包含實現具體行為、具體特徵的Implementor介面.

改善的抽象(RefinedAbstraction):繼承自Abstraction的子類,在Abstraction角色基礎上增加新功能.

實現者(Implementor):定義用於實現Abstraction行為的介面.

具體實現者(ConcreteImplementor):實現Implementor的介面.

以空調和顯示器為例子:

class AirConditioner {
    
    var monitor:Monitor?
    
    init(monitor:Monitor) {
        self.monitor = monitor
    }
    
    func display() { }
}

class HaierAirConditioner: AirConditioner {
    
    override func display() {
        self.monitor?.showTemperature()
    }
    
}
class Monitor {
    
    func showTemperature() { }
}

class TemperatureMonitor:Monitor {
    
    override func showTemperature() {
        print("FlyElephant---風和日麗,萬里無雲")
    }
    
}
     let airConditioner:HaierAirConditioner = HaierAirConditioner(monitor: TemperatureMonitor())
        airConditioner.display()

適用場景:
① 當一個物件有多個變化因素時,可以考慮使用橋接模式,通過抽象這些變化因素,將依賴具體實現修改為依賴抽象.

② 當一個物件的多個變化因素可以動態變化,不希望影響客戶端的程式使用時可以考慮橋接模式.

③ 如果使用繼承的實現方案,會導致產生很多子類,任何一個變化因素都需要產生多個類來完成,就要考慮橋接模式.

相關文章