美文网首页设计模式
设计模式-桥接模式

设计模式-桥接模式

作者: Hengry | 来源:发表于2023-10-15 07:52 被阅读0次

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

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

    相关文章

      网友评论

        本文标题:设计模式-桥接模式

        本文链接:https://www.haomeiwen.com/subject/tixabdtx.html