桥接模式可以将抽象与实现解耦,使得抽象和实现这两部分可以独立变化,这能够提高系统的扩展性和可维护性。桥接模式是一种结构型模式,这种结构能够帮助我们更好的组织和管理代码。在本博客中我们将通过跨平台应用的实例来说明桥接模式的特点
简单实现
下图展示了跨平台应用的简单架构实现,通过继承的方式进行平台、应用程序的扩展
这种架构抽象方式非常简单,但如果需要进行平台的扩展、新应用的开发,将会非常困难
新增支持 IOS、Android 平台,则需要在新增的平台上创建所有应用程序类
新增应用程序,则需要在所有平台创建新增的应用程序类
这种方式的扩展不仅会导致类的数量剧增且难以维护,同时对于平台的扩展,也会影响到具体应用程序类的代码,这也违反了 SRP 设计原则
桥接模式
桥接模式的核心思想是将抽象部分与实现部分解耦,主要包含以下几个角色
- Abstraction: 抽象类,定义抽象部分接口
- RefineAbstraction: 扩展抽象类,增加新的行为或特性
- Implementor: 定义实现部分的接口
- ConcreteImplementor: 具体实现类,实现具体的操作,该类包含了抽象所需的全部功能
这里的 Client 表示使用方,使用方依赖抽象而不是具体实现,这同时也符合 DIP 设计原则。我们来看看桥接实现方式,是如何体现出更好的系统扩展性
扩展平台和应用程序更简单,互不影响,符合 SRP 设计原则
应用场景
桥接模式适用于需要处理多种实现方式的场景
- 跨平台应用程序:需要在 Windows、Linux、Mac操作系统中运行的应用程序,可以通过桥接方式处理不同平台之间的差异
- 不同用户界面:需要支持 Windows界面和 WEB界面的系统,可以通过桥接方式来解决不同界面间的差异
- 多数据库系统:需要支持 Mysql、Oracle、SQL Server 数据库系统,可以通过桥接方式解决不同数据库之间的差异