适配器模式(Adapter Pattern)

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换为客户期望的另一个接口。通过这种方式,原本由于接口不兼容而无法协同工作的类能够一起工作。

体现的设计原则

  1. 单一职责原则:通过分离接口转换的职责到适配器类中,保持了原有类的功能单一性。
  2. 开闭原则:可以在不修改现有代码的情况下引入新的适配器类来支持新类型的接口转换。
  3. 封装变化:将接口的差异封装在适配器中,使得系统其他部分不受影响。

示例场景

假设有一个老项目中的数据读取类 OldDataReader,它的接口方法是 readOldFormatData(),而新项目需要的数据读取接口是 readNewFormatData()。我们可以通过创建一个适配器类 DataAdapter 来解决这个问题。

Java 代码示例

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 方法中,调用了 OldDataReaderreadOldFormatData 方法,并进行了必要的数据转换。

这样,新项目就可以通过 NewDataReader 接口使用旧的数据读取功能,而无需修改原有的 OldDataReader 类。

相关推荐
笨手笨脚の1 天前
设计模式-适配器模式
设计模式·适配器模式·结构型设计模式
青草地溪水旁2 天前
第六章:适配器模式 - 接口转换的艺术大师
c++·适配器模式
YA3334 天前
java设计模式五、适配器模式
java·设计模式·适配器模式
Mr_WangAndy7 天前
C++设计模式_结构型模式_适配器模式Adapter
c++·设计模式·适配器模式·c++设计模式
1710orange7 天前
java设计模式:适配器模式
java·设计模式·适配器模式
大飞pkz12 天前
【设计模式】适配器模式
开发语言·设计模式·c#·适配器模式
MetaverseMan1 个月前
Golang单例模式和工厂模式详解
开发语言·golang·适配器模式
o0向阳而生0o1 个月前
100、23种设计模式之适配器模式(9/23)
设计模式·适配器模式
bikong71 个月前
适配器模式,C++ 实践讲解
适配器模式
TechNomad1 个月前
设计模式:适配器模式(Adapter Pattern)
设计模式·适配器模式