java设计模式之 - 适配器模式

想学习springboot,springboot+vue项目,SpringCloudAlibaba的小伙伴,可以免费观看视频地址:

html 复制代码
springcloudalibaba地址:
https://www.bilibili.com/video/BV1cFDEYWEkY/?vd_source=14d27ec13a4737c281b7c79463687112
html 复制代码
springboot地址:
https://www.bilibili.com/video/BV1nkmRYSErk/?vd_source=14d27ec13a4737c281b7c79463687112
html 复制代码
springboot+vue案例地址:
https://www.bilibili.com/video/BV1JLSEYJETc/?vd_source=14d27ec13a4737c281b7c79463687112

**适配器模式(Adapter Pattern)**是一种结构型设计模式,它允许不兼容的接口之间的协同工作,通常用于将一个类的接口转换成客户端期望的另一个接口。适配器让那些接口不兼容的类可以一起工作。

适配器模式的主要角色:

  1. 目标接口(Target):客户期望的接口。
  2. 适配者(Adaptee):需要被适配的类。
  3. 适配器(Adapter):将适配者接口转换为目标接口的类。

简单案例:

假设我们有一个 Adaptee 类,它有一个 specificRequest() 方法,但是客户期望的接口是 Target 接口中的 request() 方法。我们的任务是创建一个 Adapter 类来使得 Adaptee 类能够以 Target 接口的形式被使用。

1. 定义目标接口(Target)
java 复制代码
public interface Target {
    void request();
}
2. 创建适配者类(Adaptee)
java 复制代码
public class Adaptee {
    public void specificRequest() {
        System.out.println("Adaptee: Specific request executed.");
    }
}
3. 创建适配器类(Adapter)
java 复制代码
public class Adapter implements Target {
    private Adaptee adaptee;

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

    @Override
    public void request() {
        adaptee.specificRequest();
    }
}
4. 客户端代码
java 复制代码
public class Client {
    public static void main(String[] args) {
        Adaptee adaptee = new Adaptee();
        Target target = new Adapter(adaptee);
        target.request(); // 这将调用 Adaptee 的 specificRequest() 方法
    }
}

在这个案例中,Adapter 类实现了 Target 接口,并在内部持有 Adaptee 类的实例。Adapter 类的 request() 方法调用了 Adaptee 类的 specificRequest() 方法,从而使得 Adaptee 类能够以 Target 接口的形式被使用。

当你运行 Client 类的 main 方法时,你将看到以下输出:

复制代码
Adaptee: Specific request executed.

这表明适配器模式成功地将 Adaptee 类适配到了 Target 接口,使得客户端代码可以无缝地使用 Adaptee 类的功能。

相关推荐
大模型玩家七七8 小时前
基于语义切分 vs 基于结构切分的实际差异
java·开发语言·数据库·安全·batch
寻星探路13 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
曹牧15 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
爬山算法16 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty72516 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎16 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄16 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
忆~遂愿16 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
小韩学长yyds16 小时前
Java序列化避坑指南:明确这4种场景,再也不盲目实现Serializable
java·序列化