设计模式之桥接模式

设计模式之桥接模式

引入

初始方案

场景一:

Sunny 软件公司欲开发一个跨平台图像浏览系统,要求该系统能够显示 BMP、JPG、GIF、PNG 等多种格式的文件,并且能够在Windows、Linux、Unix 等多个操作系统上运行。
系统首先将各种格式的文件解析为像素矩阵( Matrix ),然后将像素矩阵显示在屏幕上,在不同的操作系统中可以调用不同的绘制函数来绘制像素矩阵。
系统需具有较好的扩展性以支持新的文件格式和操作系统。

初始的设计方案如下:

这种设计方案解决的问题有:

  • 将图片格式和操作系统解耦,将这两个维度分离,各自独立变化,进而对二者设计独立的继承等级结构,符合单一职责原则
  • 摒弃多重继承,而使用关联关系(Image与ImageImp之间的关联),符合合成复用原则。
  • 使用抽象类,符合里氏代换原则。
  • 符合开闭原则。
  • 使用抽象类,利用运行时多态,可以对子类做统一处理。

桥接模式

桥接模式:

抽象部分实现部分分离,使他们都可以独立的变化。

(通常情况下,我们将 具有两个变化维度的类的业务方法 和 与之关系最密切的维度 设计为 抽象类层次结构(抽象部分),而将另一个维度设计为 实现类层次结构(实现部分)

两个要点:

  • 抽象关联(抽象类之间的关联关系) 取代 多继承
  • 将类之间的 静态继承关系 转换为 动态的对象组合关系
设计结构图

设计模式之桥接模式

其中:

  • Abstraction 抽象类:定义一个Implementor类型的变量,实现与Implementor的抽象关联。抽象类中既可以包含抽象业务方法(abstract方法),也可以包含具体业务方法
  • RefinedAbstraction(抽象类实体):实现了在Abstraction中的抽象方法,以及可以利用 Implementor变量调用Implementor中定义的业务方法
  • Implementor 实现类接口:相当于实现部分的抽象类
  • ConsreteImplementor 实现类实体:程序运行时,将替换父类,将自己的业务方法传递给抽象类实体
总结

桥接模式将实体的抽象部分和实现部分分离,使其独立变化。

满足:

  • 单一职责原则
  • 开闭原则
  • 合成复用原则
  • 里氏代换原则

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年10月18日
下一篇 2019年10月18日

相关推荐