桥接模式通过接口定义统一数据库操作行为,各驱动类独立实现,桥接管理器持接口引用并支持运行时动态切换具体驱动,实现换库不改业务代码。

核心思路是:用接口定义统一行为,让不同数据库驱动各自实现,再通过一个桥接类持有该接口引用,运行时动态替换具体实现——切换数据库就变成换对象,不改逻辑代码。
定义统一驱动接口(Implementor)
这是桥接的“实现端”,只声明能力,不关心谁来干:
- 接口名建议简洁明确,比如 DatabaseDriver
- 方法聚焦核心动作,如 connect()、execute(String sql)、close()
- 避免暴露数据库特有细节(如 MySQL 的
setAutoCommit),保持抽象干净
编写各数据库的具体驱动(Concrete Implementor)
每个数据库写一个实现类,完全解耦:
-
MySQLDriver:基于
com.mysql.cj.jdbc.Driver封装连接与执行逻辑 -
OracleDriver:使用
oracle.jdbc.driver.OracleDriver实现相同接口 - 新增 PostgreSQL?只需加 PostgreDriver,其他代码零改动
- 所有实现类互不影响,可单独测试、独立升级
构建桥接管理器(Abstraction + Refined Abstraction)
这是“抽象端”,面向业务,持有接口引用:
- 定义抽象类 DatabaseConnector,含
DatabaseDriver driver字段 - 提供 setDriver() 方法支持运行时注入(例如从配置读取类型后 new 对应驱动)
- 业务方法如 runQuery(String sql) 内部只调
driver.execute(sql),不感知具体库 - 若需扩展功能(如带连接池、自动重试),可继承
DatabaseConnector新建子类,不碰驱动层
运行时切换驱动(实战关键)
真正实现“换库不改代码”的环节:
- 启动时读配置文件或环境变量,识别目标数据库类型(如
db.type=oracle) - 用工厂或简单 if-else 创建对应驱动实例:
connector.setDriver(new OracleDriver()) - 后续所有
connector.runQuery(...)调用,自动走 Oracle 实现 - 切回 MySQL?只需改配置+重启,或在 Web 管理界面点选后重新 setDriver
不复杂但容易忽略:桥接的价值不在写多少代码,而在于把“哪个库”这个可变因素从主流程中抽离出来,让数据库类型成为参数而非硬编码。


















