23种设计模式-结构型模式之适配器模式(Java版本)

news2025/4/22 5:59:00

Java 适配器模式(Adapter Pattern)详解

🔌 什么是适配器模式?

适配器模式用于将一个类的接口转换成客户端所期望的另一种接口,让原本接口不兼容的类可以协同工作。

📦 就像插头转换器,让不同国家的插座和电器匹配。


🧠 使用场景

  • 系统中有现成的类,但接口不符合需求
  • 想复用老代码,但不想改动它
  • 接口适配第三方库或遗留系统

🏗️ 模式结构

  • Target(目标接口):客户端期望的接口
  • Adaptee(被适配者):已有的接口
  • Adapter(适配器):将 Adaptee 转换为 Target

✅ 示例:USB 转 Type-C 适配器

目标接口(TypeC)

public interface TypeC {
    void chargeWithTypeC();
}

被适配者(老版 USB)

public class USBCharger {
    public void chargeWithUSB() {
        System.out.println("使用 USB 接口充电");
    }
}

适配器类(类适配器方式,使用继承)

public class USBToTypeCAdapter extends USBCharger implements TypeC {
    @Override
    public void chargeWithTypeC() {
        System.out.println("适配器转换 Type-C -> USB");
        chargeWithUSB(); // 实际还是调用 USB
    }
}

客户端调用

public class Main {
    public static void main(String[] args) {
        TypeC charger = new USBToTypeCAdapter();
        charger.chargeWithTypeC();
    }
}

🔄 另一种方式:对象适配器(使用组合)

public class USBToTypeCObjectAdapter implements TypeC {
    private USBCharger usbCharger;

    public USBToTypeCObjectAdapter(USBCharger usbCharger) {
        this.usbCharger = usbCharger;
    }

    @Override
    public void chargeWithTypeC() {
        System.out.println("对象适配器:Type-C -> USB");
        usbCharger.chargeWithUSB();
    }
}

🧩 优点

  • 解耦客户端与具体实现类
  • 提高复用性(复用旧类)
  • 灵活性强:支持类适配或对象适配

⚠️ 缺点

  • 增加系统复杂性
  • 过多使用会导致系统中充斥着适配器,降低可读性

✅ 使用建议

适配器模式适用于以下场景:

  • 接口不兼容但需复用旧类
  • 调整不同模块或库之间的协作接口
  • 系统升级过渡阶段,保留旧逻辑的同时支持新接口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2339890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动态LOD策略细节层级控制:根据视角距离动态简化远距量子态渲染

动态LOD策略在量子计算可视化中的优化实现 1. 细节层级控制:动态简化远距量子态渲染 在量子计算的可视化中,量子态通常表现为高维数据(如布洛赫球面或多量子比特纠缠态)。动态LOD(Level of Detail)策略通过以下方式优化渲染性能: 距离驱动的几何简化: 远距离渲染:当…

线程池的介绍

目录 一、什么是线程池 二、线程池的详细内容 三、线程池的简化 一、什么是线程池 提到线程池,我们可能想到 常量池,可以先来说说常量池: 像是字符串常量,在Java程序最初构建的时候,就已经准备好了,等程…

安恒安全渗透面试题

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…

计算机是如何工作的(上)

对于学习JavaEE初阶为什么要知道计算机是如何工作的,是因为在未来我们写代码的时候,会出现一些bug,而在代码层面是看不出来的,所以我们需要了解一些关于计算机内部是如何工作的,从而提高代码的健壮度。 计算机的组成&…

基础服务系列-Windows10 安装AnacondaJupyter

下载 https://www.anaconda.com/products/individual 安装 安装Jupyter 完成安装 启动Jupyter 浏览器访问 默认浏览器打开,IE不兼容,可以换个浏览器 修改密码 运行脚本

Kubernetes架构介绍

实验环境 安装好k8s集群 一、kubernetes组件构成 1、架构图 2、组件介绍 使用以下命令查看相关资源 kubectl get nodes 查看群集节点 kubectl get ns 查看名称空间 kubectl get pod -A …

远程服务器的mysql连接不上,问题出在哪里

使用本地ideal测试连接报错记录 排查 检查mysql服务是否正常,输入命令systemctl status mysql查看 检查端口netstat -plnt | grep mysql 最后检查服务器的防火墙设置 我以为在服务器厂商的控制面板设置放行规则就行,导致一直无法排查出问题,最后才发现由…

Java高频面试之并发编程-04

hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:调用 start()方法时会执行 run()方法,那为什么不直接调用 run()方法? 多线程中调用 start() 方法…

【第16届蓝桥杯软件赛】CB组第一次省赛

个人主页:Guiat 归属专栏:算法竞赛 文章目录 A. 移动距离(5分填空题)B. 客流量上限(5分填空题)C. 可分解的正整数D. 产值调整E. 画展布置F. 水质检测G. 生产车间H. 装修报价 正文 总共10道题。 A. 移动距离…

云原生--基础篇-2--云计算概述(云计算是云原生的基础,IaaS、PaaS和SaaS服务模型)

1、云计算概念 云计算是一种通过互联网提供计算资源(包括服务器、存储、数据库、网络、软件等)和服务的技术模式。用户无需拥有和维护物理硬件,而是可以根据需要租用这些资源,并按使用量付费。 2、云计算特点 (1&am…

vllm+vllm-ascend本地部署QwQ-32B

1 模型下载 可按照此处方法下载预热后的模型,速度较快(推荐artget方式) https://mirrors.tools.huawei.com/mirrorDetail/67b75986118b030fb5934fc7?mirrorNamehuggingface&catalogllms或者从hugging face官方下载。 2 vllm-ascend安…

栈和队列--数据结构初阶(2)(C/C++)

文章目录 前言理论部分栈的模拟实现STL中的栈容器队列的模拟实现STL中的队列容器 作业部分 前言 这期的话会给大家讲解栈和队列的模拟实现和在STL中栈和队列怎么用的一些知识和习题部分(这部分侧重于理论知识,习题倒还是不难) 理论部分 栈的模拟实现 typedef int…

C++常用函数合集

万能头文件&#xff1a;#include<bits/stdc.h> 1. 输入输出流&#xff08;I/O&#xff09;函数 1.1cin 用于从标准输入流读取数据。 1.2cout 用于向标准输出流写入数据。 // 输入输出流&#xff08;I/O&#xff09;函数 #include <iostream> using namespace…

OpenGL shader开发实战学习笔记:第十二章 深入光照

1. 深入光照 1.1. 平行光 我们在前面的章节中&#xff0c;已经介绍了平行光的基本原理和实现步骤 平行光的基本原理是&#xff0c;所有的光都从同一个方向照射到物体上&#xff0c;这个方向就是平行光的方向。 1.2. 点光源 点光源的基本原理是&#xff0c;所有的光都从一个…

PCB 射频天线设计和版图创建技巧

本文要点 射频天线有多种形式&#xff0c;从整合在芯片中的扁平天线&#xff0c;到直接印制在PCB上的铜质天线。 创建带有一个或多个天线的版图时&#xff0c;需要确保在PCB不同电路模块之间彼此隔离。 在设计一个射频天线时&#xff0c;应该使用CAD工具&#xff0c;此类…

uniapp-商城-29-vuex 关于系统状态的管理

按照我们前面讲的&#xff0c;vuex&#xff0c;的使用方式&#xff1a; 步骤如下&#xff1a; 1 先创建store 文件夹 2 在 store 中 创建一个 index.js 3、 在 store 中&#xff0c;创建一个modules文件夹 4、在store中&#xff0c;创建一个getters.js 5、在modules文件…

小迪安全-112-yii反序列化链,某达oa,某商场,影响分析

yii是和tp一样的框架 入口文件 web目录下 相对tp比较简单一些&#xff0c;对比tp找一下他的url结构 对应的位置结构 这个contorllers文件的actionindex就是触发的方法 控制器&#xff0c;指向的index文件&#xff0c;就可以去视图模块看index文件 这就是前端展示的文件 自…

区间选点详解

步骤 operator< 的作用在 C 中&#xff0c; operator< 是一个运算符重载函数&#xff0c;它定义了如何比较两个对象的大小。在 std::sort 函数中&#xff0c;它会用到这个比较函数来决定排序的顺序。 在 sort 中&#xff0c;默认会使用 < 运算符来比较两个对象…

如何在白平衡标定种构建不同类型的白平衡色温坐标系

目录 一、预备知识&#xff1a; 二、常见的白平衡色温坐标系 三、白平衡色温坐标系的理解 1&#xff09;横纵坐标轴分别代表什么含义&#xff1f; 2&#xff09;色温坐标系中原点表示什么含义&#xff1f; 3&#xff09;某M/某H的色温坐标为什么是长成这样呢&#xff1f;…

Oracle RMAN同步数据库Active database duplicate

Active database duplicate&#xff0c;不需要先把目标数据库进行rman备份&#xff0c;只要目标数据库处于归档模式下即可直接通过网络对数据库进行copy&#xff0c;且copy完成后自动open数据库。这对于大数据特别是T级别的数据库来说优点非常明显&#xff0c;复制前不需要进行…