适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换为客户期望的另一个接口。通过这种方式,原本由于接口不兼容而无法协同工作的类能够一起工作。
体现的设计原则
- 单一职责原则:通过分离接口转换的职责到适配器类中,保持了原有类的功能单一性。
- 开闭原则:可以在不修改现有代码的情况下引入新的适配器类来支持新类型的接口转换。
- 封装变化:将接口的差异封装在适配器中,使得系统其他部分不受影响。
示例场景
假设有一个老项目中的数据读取类 OldDataReader
,它的接口方法是 readOldFormatData()
,而新项目需要的数据读取接口是 readNewFormatData()
。我们可以通过创建一个适配器类 DataAdapter
来解决这个问题。
Java 代码示例
// 老项目中的数据读取类
class OldDataReader {
public String readOldFormatData() {
return "Old format data";
}
}
// 新项目所需的数据读取接口
interface NewDataReader {
String readNewFormatData();
}
// 适配器类,将 OldDataReader 的接口转换为 NewDataReader 接口
class DataAdapter implements NewDataReader {
private OldDataReader oldDataReader;
public DataAdapter(OldDataReader oldDataReader) {
this.oldDataReader = oldDataReader;
}
@Override
public String readNewFormatData() {
// 调用老接口并进行数据转换
String oldData = oldDataReader.readOldFormatData();
return convertToNewFormat(oldData);
}
private String convertToNewFormat(String oldData) {
// 数据转换逻辑
return "Converted: " + oldData;
}
}
// 客户端代码
public class AdapterPatternDemo {
public static void main(String[] args) {
OldDataReader oldDataReader = new OldDataReader();
NewDataReader newDataReader = new DataAdapter(oldDataReader);
// 使用新接口读取数据
System.out.println(newDataReader.readNewFormatData());
}
}
在这个例子中:
OldDataReader
是现有的、不能直接满足新需求的老类。NewDataReader
是新项目要求的接口。DataAdapter
是适配器类,实现了NewDataReader
接口,并持有一个OldDataReader
实例。在readNewFormatData
方法中,调用了OldDataReader
的readOldFormatData
方法,并进行了必要的数据转换。
这样,新项目就可以通过 NewDataReader
接口使用旧的数据读取功能,而无需修改原有的 OldDataReader
类。