Java 桥接模式实战:解耦数据库与文件格式转换
在处理复杂业务时,我们常遇到需要同时支持多种维度的场景。比如一个数据转换工具,既要对接不同的数据库(Oracle、SQL Server),又要输出不同的文件格式(PDF、TXT、XML)。如果将所有组合都写在一个类里,代码会迅速膨胀且难以维护。桥接模式(Bridge Pattern)正是解决这类问题的利器,它将抽象部分与实现部分分离,使它们可以独立变化。
核心架构设计
在这个案例中,我们需要定义两个独立的维度:
- 抽象层:负责文件转换的逻辑(如 PDF、TXT、XML)。
- 实现层:负责底层数据的读取(如 Oracle、SQL Server)。
通过让抽象层持有实现层的引用,我们可以动态组合任意一种数据库和任意一种文件格式,而无需修改核心代码结构。
关键代码实现
1. 定义实现接口 (DataHandler)
首先,我们需要明确'数据读取'这一维度的契约。无论底层是哪种数据库,对外提供的读取能力应该是一致的。
package step1;
public abstract class DataHandler {
public abstract void readData();
}
这个抽象类强制所有具体的处理器(例如 OracleHandler、SQLServerHandler)实现各自的读取逻辑。这样上层转换逻辑就不需要关心数据具体来自哪里。
2. 定义抽象层 (FileConvertor)
接下来是文件转换的抽象基类。它不直接处理数据,而是委托给 DataHandler 去获取数据。
package step1;
public abstract class FileConvertor {
// 持有实现部分对象引用
protected DataHandler dataHandler;
public void setDataHandler(DataHandler dataHandler) {
this.dataHandler = dataHandler;
}
// 抽象的转换方法,由具体子类实现
public abstract void translate();
}
注意这里的 dataHandler 成员变量。这是桥接模式的关键,它允许我们在运行时注入具体的数据源。 方法定义了转换行为的接口,具体格式的处理留给子类完成。


