美文网首页
Swift-桥接模式(Bridge Pattern)

Swift-桥接模式(Bridge Pattern)

作者: 863cda997e42 | 来源:发表于2017-09-25 08:53 被阅读109次

    桥接模式

    1. 桥接模式的目的是把抽象层次结构从其实现中分离出来,使其能够独立变更。
    2. 抽象层定义了供客户端使用的上层的抽象接口。实现层次结构定义了抽象层次使用的底层接口。
    3. 实现类的引用被封装于抽象层的实例中,桥接就形成了。

    适用性

    1. 不想在抽象与其实现之间形成固定的绑定关系(这样就能在运行时切换实现)
    2. 抽象及其实现都应可以通过子类化独立进行扩展
    3. 对抽象的实现进行修改不应影响客户端代码
    4. 如果每个实现需要额外的子类以细化抽象,则说明有必要把它们分成两个部分
    5. 想在带有不同抽象接口的多个对象之间共享一个实现

    桥接模式的优点:

    1. 桥接模式使用聚合关系,解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化
    2. 提高了系统的可扩展性,可以独立地对抽象部分和实现部分进行扩展
    3. 可减少子类的个数,这个在前面讲手机示例的时候进行分析了
    4. 实现细节对客户透明,可以对用户隐藏实现细节

    桥接模式的缺点:

    1. 桥接模式的引入会增加系统的理解与设计难度,由于聚合关系建立在抽象层,要求开发者针对抽象进行设计与编程
    2. 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性

    Example

    protocol Switch {
        var appliance: Appliance {get set}
        func turnOn()
    }
    
    protocol Appliance {
        func run()
    }
    
    class RemoteControl: Switch {
        var appliance: Appliance
    
        func turnOn() {
            self.appliance.run()
        }
        
        init(appliance: Appliance) {
            self.appliance = appliance
        }
    }
    
    class TV: Appliance {
        func run() {
            print("tv turned on");
        }
    }
    
    class VacuumCleaner: Appliance {
        func run() {
            print("vacuum cleaner turned on")
        }
    }
    
    var tvRemoteControl = RemoteControl(appliance: TV())
    tvRemoteControl.turnOn()
    
    var fancyVacuumCleanerRemoteControl = RemoteControl(appliance: VacuumCleaner())
    fancyVacuumCleanerRemoteControl.turnOn()
    
    

    相关文章

      网友评论

          本文标题:Swift-桥接模式(Bridge Pattern)

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