适配器模式(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 类。

相关推荐
魑魅魍魉都是鬼3 天前
Java 适配器模式(Adapter Pattern)
java·开发语言·适配器模式
彭于晏Yan5 天前
Spring Boot中适配器模式的实现方式
spring boot·设计模式·适配器模式
geovindu11 天前
python: Adapter Pattern
java·python·设计模式·适配器模式
Anurmy11 天前
设计模式之适配器模式
设计模式·适配器模式
JTCC11 天前
Java 设计模式西游篇 - 第八回:适配器模式通万国 女儿国语言无障碍
python·设计模式·适配器模式
无心水11 天前
【OpenClaw:实战部署】7、Channel子系统设计:如何优雅接入10+消息渠道?——统一接口+适配器模式实战
适配器模式
青春易逝丶11 天前
适配器模式
适配器模式
sg_knight1 个月前
适配器模式(Adapter)
python·设计模式·适配器模式·adapter
java干货1 个月前
如何让 iPhone 用上 Type-C 充电器?适配器模式详解
c语言·iphone·适配器模式
驴儿响叮当20101 个月前
设计模式之适配器模式
设计模式·适配器模式