当前位置: 首页 > news >正文

Java设计模式-适配器模式

1、简介

适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。

2、适配器模式分类

  • 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。

  • 需要适配的类(Adaptee):需要适配的类或适配者类。

  • 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。

3、代码展现-类适配器(通过继承方式实现)

场景:我电脑需要上网,但是只有网线不行得,但是需要usb插口才可以上网

网线类,能够实现上网,但是没有接口适配器

/*** @Author charles.yao* @Description 网线(能够上网-需要转化成usb)* @Date 2023/3/7 19:36*/
public class NetWorkLine {/*** 能够上网*/public void requestNet() {System.out.println("我是网线能够上网");}
}

转换接口&&适配器

/*** 网线转换成usb*/
public interface INetWorkToUsb {/*** 将网线转换成usb*/void convertToRequestNet();
}/*** @Author charles.yao* @Description 网络适配器()* @Date 2023/3/7 19:40*/
public class NetAdapter extends NetWorkLine implements INetWorkToUsb{@Overridepublic void convertToRequestNet() {//TODO 业务处理在进行转化super.requestNet();}
}

电脑通过适配器才能上网

/*** @Author charles.yao* @Description 电脑上网* @Date 2023/3/7 19:44*/
public class ComputerOnLine {/*** 电脑上网-插入适配器进行转换才能上网* @param adapter*/public void online(INetWorkToUsb adapter){adapter.convertToRequestNet();}
}

测试类


/*** @Author charles.yao* @Description 适配器测试类* @Date 2023/3/7 19:45*/
public class AdapterTest {public static void main(String[] args) {ComputerOnLine computerOnLine = new ComputerOnLine();INetWorkToUsb netAdapter = new NetAdapter();computerOnLine.online(netAdapter);}
}

4、通过类适配器方式实现

/*** @Author charles.yao* @Description 对象适配器-取消继承方式,使用构造方式一样可以* @Date 2023/3/7 19:52*/public class NetAdapter1 implements INetWorkToUsb{private NetWorkLine netWorkLine;public NetAdapter1(NetWorkLine netWorkLine) {this.netWorkLine = netWorkLine;}@Overridepublic void convertToRequestNet() {netWorkLine.requestNet();}}

测试类

/*** @Author charles.yao* @Description 适配器测试类* @Date 2023/3/7 19:45*/
public class AdapterTest2 {public static void main(String[] args) {ComputerOnLine computerOnLine = new ComputerOnLine();INetWorkToUsb netAdapter = new NetAdapter1(new NetWorkLine());computerOnLine.online(netAdapter);}
}

相关文章:

Java设计模式-适配器模式

1、简介 适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。 2、适配器模式分类 目标接口(Target&#x…...

Linux 练习六 (IPC 管道)

文章目录1 标准管道流2 无名管道(PIPE)3 命名管道(FIFO)3.1 创建删除管道文件3.2 打开和关闭FIFO文件3.3 管道案例:基于管道的客服端服务器程序使用环境:Ubuntu18.04 使用工具:VMWare workstati…...

合并两个有序链表(精美图示详解哦)

全文目录引言合并两个有序链表题目描述方法一:将第二个链表合并到第一个思路实现方法二:尾插到哨兵位的头节点思路实现总结引言 在前面两篇文章中,我们介绍了几道链表的习题:反转链表、链表的中间结点、链表的倒数第k个结点&…...

33 JSON操作

目录 一、介绍 二、JSON的特点 三、JSON语法 1、json中的数据类型 四、JSON文件的定义 五、读取JSON文件 1、读取json文件的两种方式 (1)read、write (2)json.load 2、使用json.load读取json文件的步骤 3、练习读取json文件 六、练…...

三八妇女节快乐----IT女神活动随笔

献丑了,一首小小散文诗,请大家轻喷 O(≧口≦)O 我的答案 天下芸芸众生,好似夜幕漫天繁星。 与你相识,只是偶然。 简单的一个招呼,于是开始了一段故事。 我们或是诉说,或是分享; 我们彼此倾听&…...

【PSO-PID】使用粒子群算法整定PID参数控制起动机入口压力值

最近在学优化算法,接触到了经典寻优算法之粒子群PSO,然后就想使用PSO算法来调节PID参数,在试验成功之后将此控制算法应用到了空气起动系统上,同时与之前的控制器进行对比看看哪种控制效果最好。 0 引言 PID参数整定主要有两种&…...

当代数据分析指南:激发商业洞见的七个方法(上)

如果说眼下的发生的事能证明什么,那就是基于实时可信的数据分析正在变得越来越重要。但是要是想要在需要的时候准确地获取中肯的洞察,我们所需要的可不只是漂亮的可视化。 如何让你的员工都有能力和机会都做出最好的决策,不管这个决策会有多…...

javaWeb核心02-JSP、EL、JSTL、MVC

文章目录JSP1,JSP 概述2,JSP 快速入门2.1 搭建环境2.2 导入 JSP 依赖2.3 创建 jsp 页面2.4 编写代码2.5 测试3,JSP 原理4,JSP 脚本4.1 JSP 脚本分类4.2 案例4.2.1 需求4.2.2 实现4.2.3 成品代码4.2.4 测试4.3 JSP 缺点5&#xff0…...

spring-boot+mybatis-plus连接Oracle数据库,及查询相关数据

配置java 略&#xff08;这里我用的是jdk1.8&#xff09; 配置maven 环境变量&#xff1a; M2_HOME&#xff1a;D:\LJ\software\java\maven\apache-maven-3.6.3 Path&#xff1a;%M2_HOME%\bin 仓库/jdk/镜像云设置(./config/sitting) 仓库 <localRepository> D:/…...

电商使用CRM系统有什么好处,如何选择

数据显示&#xff0c;使用电商CRM客户管理系统后&#xff0c;企业销售额提高了87%&#xff0c;客户满意度提高了74%&#xff0c;业务效率提高了73%。要在竞争激烈的电商市场取得成功&#xff0c;与目标受众的有效沟通是有效的方法。下面说说什么是电商CRM系统&#xff1f;电商C…...

Nacos2.2.0多数据源适配oracle12C-修改Nacos源码

从2.2.0版本开始,可通过SPI机制注入多数据源实现插件,并在引入对应数据源实现后,便可在Nacos启动时通过读取application.properties配置文件中spring.datasource.platform配置项选择加载对应多数据源插件.本文档详细介绍一个多数据源插件如何实现以及如何使其生效。 文章目录一…...

第十四届蓝桥杯三月真题刷题训练——第 5 天

目录 题目1&#xff1a;数的分解 题目描述 运行限制 代码&#xff1a; 题目2&#xff1a;猜生日 题目描述 运行限制 代码&#xff1a; 题目3&#xff1a;成绩分析 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码&#xff1a; 题目4&#xff1a;最大和…...

大数据框架之Hive:第3章 DDL(Data Definition Language)数据定义

第3章 DDL&#xff08;Data Definition Language&#xff09;数据定义 3.1 数据库&#xff08;database&#xff09; 3.1.1 创建数据库 1&#xff09;语法 CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPER…...

概率论小课堂:统计学是大数据方法的基础

文章目录 引言I 统计学1.1 统计学的内容1.2 统计学的目的II 用好数据的五个步骤2.1 设立研究目标2.2 设计实验,选取数据。2.3 根据实验方案进行统计和实验,分析方差。2.4 通过分析进一步了解数据,提出新假说。2.5 使用研究结果III 数据没用好的原因3.1 霍桑效应3.2 数据的稀…...

监控集群概念讲解

监控概述 1、监控的重要性 监控是运维日常的重要工作之一&#xff1b; 监控是有多重要&#xff1f; 监控可以帮助运维监控服务器的状态&#xff1b;要及时解决&#xff1b; 如果淘宝、腾讯宕机了1个小时&#xff1f; 损失是无法估量的&#xff1b; 服务器是否故障、宕不…...

如何通过DAS连接GaussDB

文章目录1 实验介绍2 实验目的3 配置DAS服务4 SQL使用入门1 实验介绍 本实验主要描述如何通过华为云数据管理服务 (Data Admin Service&#xff0c;简称DAS) 来连接华为云GaussDB数据库实例&#xff0c;DAS是一款专业的简化数据库管理工具&#xff0c;提供优质的可视化操作界面…...

支持在局域网使用的项目管理系统有哪些?5款软件对比

一、选择私有部署的原因以及该方案的优点有很多可能的原因导致人们更倾向于使用私有部署的企业管理软件&#xff0c;其中一些原因可能包括&#xff1a;1.数据安全性要求&#xff1a;一些企业管理软件包含敏感的商业数据和隐私信息&#xff0c;为了保护这些信息不被未经授权的第…...

Linux CentOS7 MySQL 5.7安装

准备工作 //创建目录 mkdir /opt/mysql //跳转目录 cd /opt/mysql下载MySQL 请耐心等待&#xff0c;也可以在Windows下载以后上传到 /opt/mysql目录 wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar解压 tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-b…...

Kubernetes学习(四)控制器

ReplicaSet ReplicaSet的目的是维护一组在任何时候都处于运行状态的Pod副本的稳定集合。因此&#xff0c;它通常用来保证给定数量的、完全相同的Pod的可用性。 ReplicaSet的工作原理 ReplicaSet是通过一组字段来定义的&#xff0c;包括一个用来识别可获得的pod的集合的选择符…...

vue组件间通信的几个方法

一&#xff0c;props属性传递数据 适用场景&#xff1a;父组件传递数据给子组件 子组件设置props属性&#xff0c;定义接收父组件传递过来的参数 父组件在使用子组件标签中通过字面量来传递值 Children.vue props:{ // 字符串形式 name:String // 接收的类型参数 // 对象…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...