桥接模式定义将抽象部分与实现部分分离,使它们都可以独立的变化.熟悉桥接模式之前需要了解两个概念类的功能层次结构和类的实现层次结构.
类的功能实现层次结构是指如果在项目中新增功能,部分功能项目已经实现,通过添加子类继承来实现新增功能,有可能出现类的层次过多的情况.
类的实现层次结构是指父类通过抽象方法定义接口,新增功能的时候新增抽象方法,子类负责实现具体的实现.
桥接模式.png抽象(Abstraction):定义抽象接口,该接口中包含实现具体行为、具体特征的Implementor接口.
改善的抽象(RefinedAbstraction):继承自Abstraction的子类,在Abstraction角色基础上增加新功能.
实现者(Implementor):定义用于实现Abstraction行为的接口.
具体实现者(ConcreteImplementor):实现Implementor的接口.
以空调和显示器为例子:
<pre><code>`class AirConditioner {
var monitor:Monitor?
init(monitor:Monitor) {
self.monitor = monitor
}
func display() { }
}
class HaierAirConditioner: AirConditioner {
override func display() {
self.monitor?.showTemperature()
}
}`</code></pre>
<pre><code>`class Monitor {
func showTemperature() { }
}
class TemperatureMonitor:Monitor {
override func showTemperature() {
print("FlyElephant---风和日丽,万里无云")
}
}`</code></pre>
<pre><code>let airConditioner:HaierAirConditioner = HaierAirConditioner(monitor: TemperatureMonitor()) airConditioner.display()
</code></pre>
适用场景:
① 当一个对象有多个变化因素时,可以考虑使用桥接模式,通过抽象这些变化因素,将依赖具体实现修改为依赖抽象.
② 当一个对象的多个变化因素可以动态变化,不希望影响客户端的程序使用时可以考虑桥接模式.
③ 如果使用继承的实现方案,会导致产生很多子类,任何一个变化因素都需要产生多个类来完成,就要考虑桥接模式.
网友评论