桥接模式——java设计模式(九)

简介

桥接模式(Bridge Pattern):将抽象部分和实现部分解耦,使两者能够独立变化。

  • 如果某个类存在两个个独立变化的维度,使用桥接可以将传统的多层继承转化为抽象关联,解耦两个维度的变化,使得系统可以任意扩充一个维度而不影响另一个维度。
  • 关联关系作为连接两个维度的桥。

结构和实现

  • 角色包括:
    • 抽象类:抽象部分的抽象类,包含抽象类业务方法,关联实现类对象。
    • 扩充抽象类:实现抽象类中的业务方法,并调用实现类的业务方法。
    • 实现类接口:提供实现类的业务方法声明,是抽象类中的引用类型。
    • 具体实现类:实现实现类接口。
  • 桥接模式结构。
    180507.bridge.png
  • 客户端根据配置文件决定具体使用哪一个扩充抽象类,并注入哪一个具体实现类。无需修改源码,符合开闭原则。

实例

  • 开发跨平台的图片浏览系统,需要显示BMP,JPG,GIF,PNG等格式文件,并在Windows,Linux,Unix等操作系统上运行。系统需要先解析不同格式的文件为像素矩阵,再调用不同操作系统的绘制函数根据像素矩阵绘图。
    180507.image.png

桥接模式结合适配器模式

  • 桥接模式通常用于初步设计阶段,将两个独立维度的变化转化为抽象化和实例化两个角色。
  • 适配器模式通常用于初步设计完成后,协调系统和不兼容的已有类。
  • 如果需要设计大量的第三方应用,需要一开始就考虑适配器模式。
  • 报表处理系统中需要分开报表显示和数据输出,有多种数据输出方式和报表显示方式。显示报表和输出数据可用桥接模式,输出到excel需要使用适配器模式调用excel api。
    180507.ba.png

优缺点和适用环境

  • 优点:
    • 分离抽象部分和实现部分。可以通过增加抽象类和实现类接口的子类,使得不同维度可以自由地、不影响的变化,提高扩展性,符合开闭原则。
    • 取代多继承。多继承违背单一职责原则,复用性差,类的数量多。
  • 缺点:
    • 增加系统复杂度。设计较难,需要系统针对抽象层设计编程。
    • 识别独立维度难。使用受限。
  • 使用范围:
    • 需要在抽象化和具体化之间增加灵活性,使用关联代替继承。
    • 系统需要在运行时组合抽象化对象和具体化对象。
    • 一个类存在两个以上独立的维度,且需要独立扩展。
    • 继承导致类的数量过多。

jdk中的应用

  • java.util.logging中的Handler和Formatter。Handler作为抽象类,Formatter作为实现类接口。
    180509.Handler.png
  • 在Handler中维持一个Formatter的引用,并在publish方法中调用Formatter的format方法。
    180509.handlerformate.png
    180509.streamheanler.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值