Swift-桥接模式(Bridge Pattern)

桥接模式

  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()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 发送提示消息## 考虑这样一个实际的业务功能:发送提示消息。基本上所有带业务流程处理的系统...
    七寸知架构阅读 10,510评论 5 63
  • 在正式介绍桥接模式之前,我先跟大家谈谈两种常见文具的区别,它们是毛笔和蜡笔。假如我们需要大中小3种型号的画笔,能够...
    justCode_阅读 5,741评论 0 7
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 9,382评论 1 15
  • 设计模式基本原则 开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。开-闭原...
    西山薄凉阅读 9,340评论 3 14
  • Iterator模式 (迭代器) 一个一个遍历 一个集合类可以遵守 Iterator 协议,并实现一个 Itera...
    SSBun阅读 5,853评论 0 15