适配器模式(设计模式)

适配器模式主要在于将一个接口转变成另一个接口,它的目的是通过改变接口来达到重复使用的目的;

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许接口不兼容的对象能够相互合作。适配器模式通过将一个类的接口转换成客户端期望的另一个接口,使得原本因接口不兼容而无法一起工作的类可以在一起工作。适配器模式通常用于现有类的改造,而不修改其源代码。

适配器模式 springmvc请求控制适配器模式(Adapter Pattern)是一种结构型设计模式,它允许你将一个类的接口转换成客户端希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以合作。

在IO中,如将字符串数据转变成字节数据保存到文件中,将字节数据转变成流数据等都用到了适配器模式,

适配器模式的优点

  1. 提高类的复用性:通过适配器模式,可以让原本由于接口不兼容无法一起工作的类可以合作。
  2. 灵活性和扩展性好:新旧系统可以更好地结合,适配器类可以随时被重写或替换以应对新的需求。
  3. 解耦:客户端不需要关心具体的适配过程,只需要与目标接口进行交互。
    适配器模式的缺点
  4. 额外开销:增加了一个适配器层,可能会导致系统的复杂性增加。
  5. 性能影响:因为增加了适配器层,所以调用会间接通过适配器,会有一定的性能开销。

适配器模式有两种主要形式:

  1. 类适配器:使用继承来实现适配器。
  2. 对象适配器:使用组合来实现适配器。
    适配器模式的结构
    适配器模式主要包含以下几个角色:
    1.目标接口(Target):定义客户端所需的接口。
    2.被适配者(Adaptee):已有的接口或类,它需要被适配,使之符合目标接口。
    3.适配器(Adapter):实现目标接口,并通过内部引用一个被适配者对象,将被适配者的接口转换为目标接口。
    适配器模式的UML图
    ±----------+ ±-------------+
    | Target |<-------| Client |
    ±----------+ ±-------------+
    | +request()|
    ±----------+
    ^
    |
    ±--------------+
    | Adapter |
    ±--------------+
    | -adaptee: Adaptee |
    | +request() |
    ±--------------+
    |
    v
    ±---------------+
    | Adaptee |
    ±---------------+
    | +specificRequest()|
    ±---------------+

类适配器示例

类适配器通过多重继承来实现适配器,适配器类继承目标接口和需要适配的类

// 目标接口

public interface Target {

void request();

}

// 需要适配的类

public class Adaptee {

public void specificRequest() {

System.out.println("Adaptee: Specific request.");

}

}

// 类适配器

public class Adapter extends Adaptee implements Target {

@Override

public void request() {

specificRequest();

}

}

// 客户端代码

public class Client {

public static void main(String[] args) {

Target target = new Adapter();

target.request();

}

}

对象适配器示例

对象适配器通过组合来实现适配器,适配器类包含一个需要适配的对象的实例。

// 目标接口
public interface Target {
    void request();
}

// 需要适配的类
public class Adaptee {
    public void specificRequest() {
        System.out.println("Adaptee: Specific request.");
    }
}

// 对象适配器
public class Adapter implements Target {
    private Adaptee adaptee;

    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public void request() {
        adaptee.specificRequest();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Adaptee adaptee = new Adaptee();
        Target target = new Adapter(adaptee);
        target.request();
    }
}

适配器模式的应用场景

  1. 系统需要使用现有的类,而这些类的接口不符合要求。
  2. 创建一个可以协同多个子系统的类,而这些子系统的接口不同。
  3. 想要创建一个可以复用的类,该类可以与不兼容的接口一起工作。
    适配器模式是非常有用的设计模式,特别是在需要整合不同接口或改造旧系统以适应新需求时。它通过引入适配器类,解决了接口不兼容的问题,使得系统具有更好的复用性和灵活性。
    适配器模式的实际应用
    适配器模式在实际开发中有广泛的应用,例如:
    Java I/O库:Java的I/O库中有大量的适配器模式的应用,例如 InputStreamReader 适配了 InputStream 到 Reader 的接口。
    GUI框架:在图形用户界面开发中,经常需要适配不同组件的接口,使其可以协同工作。
    数据库访问:在数据库访问层中,适配器模式可以将不同数据库驱动的接口适配为统一的接口,简化数据库操作。
    通过使用适配器模式,可以在不修改现有类的情况下,实现类与类之间的协作,极大地提高了代码的复用性和灵活性。
相关推荐
小金的学习笔记4 分钟前
隐藏指定文件/文件夹和自动提示功能消失解决方案
java·idea
Q_19284999065 分钟前
基于Spring Boot的个性化推荐外卖点餐系统
java·spring boot·后端
会说法语的猪18 分钟前
IDEA使用Alt + Enter快捷键自动接受返回值一直有final修饰的问题处理
java·ide·intellij-idea
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ27 分钟前
MyBatis执行完sql后,返回的数值代表的意思
java·开发语言
思忖小下1 小时前
梳理你的思路(从OOP到架构设计)_设计模式Composite模式
设计模式·组合模式·eit
CodeClimb1 小时前
【华为OD-E卷-寻找密码 100分(python、java、c++、js、c)】
java·python·华为od
爱上语文1 小时前
宠物管理系统:Service层
java·开发语言·宠物
机器视觉知识推荐、就业指导1 小时前
C++设计模式:组合模式(公司架构案例)
c++·后端·设计模式·组合模式
水w1 小时前
【项目实践】SpringBoot Nacos配置管理 map数据
java·服务器·开发语言·spring boot·nacos
@菜鸟进阶记@1 小时前
SpringBoot核心:自动配置
java·spring boot·后端