设计模式

设计模式-桥接模式

2023-10-15  本文已影响0人  Hengry

桥接模式(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()

通过桥接模式,你可以将遥控器和电视的实现部分解耦,允许它们独立地变化。这种模式特别适用于应对多维度的变化,如品牌和类型,同时保持代码的可扩展性和可维护性。

上一篇下一篇

猜你喜欢

热点阅读