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 类的功能。

相关推荐
結城25 分钟前
Spring Security如何拿到登录用户的信息
java·spring·mybatis
GalaxyPokemon1 小时前
LeetCode - 2. 两数相加
java·前端·javascript·算法·leetcode·职场和发展
dualven_in_csdn4 小时前
搞了两天的win7批处理脚本问题
java·linux·前端
C++chaofan6 小时前
74. 搜索二维矩阵
java·算法·leetcode·矩阵
诺浅7 小时前
AWS S3 SDK FOR JAVA 基本使用及如何兼容七牛云
java·spring boot·aws
迢迢星万里灬7 小时前
Java求职者面试:微服务技术与源码原理深度解析
java·spring cloud·微服务·dubbo·netty·分布式系统
KIDAKN8 小时前
java--怎么定义枚举类
java·开发语言
何中应8 小时前
第一个人工智能(AI)问答Demo
java·人工智能·语言模型
东阳马生架构8 小时前
商品中心—3.商品可采可补可售的技术文档
java