桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分与它的实现部分分离,以使它们可以独立变>化。桥接模式通常用于解决多层次继承结构导致的类爆炸性增长问题。
以下是一个简单的桥接模式案例,假设我们要设计一个跨不同品牌的遥控器控制不同类型的电视。遥控器和电视之间存在两个维度的变化:遥控器的品牌和电视的类型。
首先,定义遥控器和电视的抽象接口:
protocol RemoteControl {
func turnOn()
func turnOff()
func setChannel(_ channel: Int)
}
protocol TV {
func powerOn()
func powerOff()
func tuneChannel(_ channel: Int)
}
然后,实现具体的遥控器类:
class GenericRemoteControl: RemoteControl {
let tv: TV
init(tv: TV) {
self.tv = tv
}
func turnOn() {
tv.powerOn()
}
func turnOff() {
tv.powerOff()
}
func setChannel(_ channel: Int) {
tv.tuneChannel(channel)
}
}
接下来,实现不同品牌的电视类:
class SonyTV: TV {
func powerOn() {
print("Sony电视已开机")
}
func powerOff() {
print("Sony电视已关机")
}
func tuneChannel(_ channel: Int) {
print("切换Sony电视频道到 \(channel)")
}
}
class SamsungTV: TV {
func powerOn() {
print("Samsung电视已开机")
}
func powerOff() {
print("Samsung电视已关机")
}
func tuneChannel(_ channel: Int) {
print("切换Samsung电视频道到 \(channel)")
}
}
现在,你可以创建遥控器,并将不同品牌的电视与之连接:
let sonyTV = SonyTV()
let samsungTV = SamsungTV()
let genericRemoteForSony = GenericRemoteControl(tv: sonyTV)
let genericRemoteForSamsung = GenericRemoteControl(tv: samsungTV)
genericRemoteForSony.turnOn()
genericRemoteForSony.setChannel(5)
genericRemoteForSony.turnOff()
genericRemoteForSamsung.turnOn()
genericRemoteForSamsung.setChannel(10)
genericRemoteForSamsung.turnOff()
通过桥接模式,你可以将遥控器和电视的实现部分解耦,允许它们独立地变化。这种模式特别适用于应对多维度的变化,如品牌和类型,同时保持代码的可扩展性和可维护性。
网友评论