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

设计模式——适配器模式06

适配器模式 通常在已有程序中使用,至少有两个类的接口不兼容时,让相互不兼容的类能很好地合作。例如之前系统 用的Target 接口调用,现在要新增第三方接口Adaptee。如何进行适配,面向客户端提供 调用Target接口方式达到使用Adaptee目的。简单理解:
客户端(Main函数)要调用Target 使用 Adaptee 功能。
根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种。

类适配器:新建一个适配器叫Adapter, Adapter 继承 Adaptee ,并实现Target接口完成适配
对象适配器:新建一个适配器叫Adapter, Adapter 里面含有 Adaptee 属性(构造器委托),并实现Target接口完成适配
设计模式,一定要敲代码理解

Target (调用目标接口)

/**
适配器—— Target 是调用目标, 是其他对象 的"榜样",都要向其看齐
*/
public interface Target {void targetUse1();void targetUse2();
}

Adaptee (需适配接口)

/*** @author ggbond* @date 2024年04月04日 10:25* 第三方接口,后面需 通过  Adapter 适配,使得Target兼容*/
public class Adaptee {public void method1() {System.out.println("Adaptee:方法1");}public void method2() {System.out.println("Adaptee:方法2");}
}

继承适配

/*** @author ggbond* @date 2024年04月04日 10:29* 类适配器 ,采用继承方式*/
public class Adapter01 extends  Adaptee implements Target {@Overridepublic void targetUse1() {System.out.println("适配 Adaptee 的方法1.");method1();}@Overridepublic void targetUse2() {System.out.println("适配 Adaptee 的方法2.");method2();}
}

委托适配

    /*** @author ggbond* @date 2024年04月04日 10:29* 对象适配器,采用继承方式*/public class Adapter02 implements Target  {private  Adaptee adaptee;public Adapter02(Adaptee adaptee) {this.adaptee = adaptee;}@Overridepublic void targetUse1() {System.out.println("适配 Adaptee 的方法1.");adaptee.method1();}@Overridepublic void targetUse2() {System.out.println("适配 Adaptee 的方法2.");adaptee.method2();}}

调用测试

/*** @author ggbond* @date 2024年04月04日 10:43* 调用Target接口,使用Adaptee接口*/
public class Main {public static void main(String[] args) {Target target01 = new Adapter01();target01.targetUse1();target01.targetUse2();System.out.println("-----------");Target target02 = new Adapter02(new Adaptee());target02.targetUse1();target02.targetUse2();}
}

结果

适配 Adaptee 的方法1.
Adaptee:方法1
适配 Adaptee 的方法2.
Adaptee:方法2
-----------
适配 Adaptee 的方法1.
Adaptee:方法1
适配 Adaptee 的方法2.
Adaptee:方法2

总结

可以将两个互不相干的类关联在一起,目的为了兼容通用。但是类适配器对于 Java等语言继承受限。满足单一职责原则与开闭原则,当然代码整体复杂度增加。

代码下载

代码下载

相关文章:

设计模式——适配器模式06

适配器模式 通常在已有程序中使用,至少有两个类的接口不兼容时,让相互不兼容的类能很好地合作。例如之前系统 用的Target 接口调用,现在要新增第三方接口Adaptee。如何进行适配,面向客户端提供 调用Target接口方式达到使用Adaptee…...

【鸿蒙开发】组件状态管理@Prop,@Link,@Provide,@Consume,@Observed,@ObjectLink

1. Prop 父子单向同步 概述 Prop装饰的变量和父组件建立单向的同步关系: Prop变量允许在本地修改,但修改后的变化不会同步回父组件。当父组件中的数据源更改时,与之相关的Prop装饰的变量都会自动更新。如果子组件已经在本地修改了Prop装饰…...

Web 前端性能优化之八:前端性能检测实践

五、前端性能检测实践 1、常用的检测工具 Lighthouse、Chrome开发者工具中与性能检测相关的一些工具面板、页面加载性能分析工具PageSpeed Insights、专业的性能检测工具WEBPAGETEST等 1、Chrome 任务管理器 通过Chrome任务管理器我们可以查看当前Chrome浏览器中&#xff0…...

安装VMware ESXi虚拟机系统

简介:ESXi是VMware公司开发的一款服务器虚拟化操作系统。它能够在一台物理服务器上运行多个虚拟机,每个虚拟机都可以独立运行操作系统和应用程序,而且对硬件配置要求低,系统运行稳定。 准备工具: 1.8G或者8G以上容…...

Vue3实践之全局请求URL配置和请求参数说明

Vue3实践之全局请求URL配置和请求参数说明 全局请求URL配置 1、首先需要导入router和axios import router from "/router";2、创建app,将router挂载到app上 const app createApp(App) app.use(router).use(elementIcons).mount(#app)3、设置全局请求…...

类和对象—初阶

目录 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1 访问限定符 【面试题】 4.2 封装 【面试题】 5.类的作用域 6.类的实例化 7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式 7.3 结构体内存对齐规则 【面试题】…...

【Linux】shell 脚本基础使用

在终端中输入命令可以完成一些常用的操作,但是我们都是一条一条输入命令,比较麻烦,为了解决这个问题,就会涉及到 shell 脚本,它可以将很多条命令放到一个文件里面,然后直接运行这个文件即可。 shell 脚本类…...

nfs部署--相关记录

以下是在 CentOS 8 中将 10.40.111.41 上的 /nfsdata 目录通过 NFS 共享到 10.40.111.43 和 10.40.111.45 的 /nfsdata 目录的详细步骤: 在 10.40.111.41 上操作: 安装并配置 NFS 服务器: a. 安装 NFS 服务器软件包: sudo dnf in…...

java国产化云HIS基层医院系统源码 SaaS模式

目录 ​ 云HIS开发环境 功能模块介绍: 1、门诊模块 2、住院模块 3、药房、药库模块 ​编辑 4、电子病历模块 5、统计报表模块 6、系统管理模块 系统优势 云his之电子病历子系统功能 云 his 系统是运用云计算、大数据、物联网等新兴信息技术,按…...

docker 部署 Epusdt - 独角数卡 dujiaoka 的 usdt 支付插件

部署 部署说明 部署之前必须注意的几点事项,该教程不一定适合所有用户: 本教程主要是使用 docker 部署,宝塔用户或宿主机直接安装的用户请直接参考官网教程.本教程是独立部署 epusdt,使用独立的mysql和redis,与dujiaoka项目分开. 在研究的过程中发现 epusdt 也需要用到 mys…...

数据结构排序之冒泡、快速、插入、选择、堆、归并等排序及时间,空间复杂度等(超详解,绝对能满足你的需求,并能学到很多有用知识)

在本文章开始之前给大家介绍个网站,可以通过下面动画网址来理解 ,(国外的网站帮助学习数据结构很多知识,可以翻译下来,在搜索框搜索相应的排序算法进行动画演示,非常好用。)​​​https://www.cs.usfca.edu/~galles/visualization/https://www.cs.usfca.edu/~galles/vis…...

如何在windows环境和linux环境运行jar包

功能:实现对字符串小写转大写 java代码如下: package a_od_test;import java.util.Locale; /* 实现小写转大写 打jar包 分别在windows环境和liunx环境运行*/ public class Main28_To_Upper {public static void main(String[] args) {if (args.length 1) {System.out.printl…...

2602B吉时利2602B数字源表

181/2461/8938产品概述: 2600B系列系统源表SMU仪器是业界领先的电流/电压源和测量解决方案,采用吉时利第三代SMU技术制造。2600B系列提供单通道和双通道型号,将精密电源、真电流源、6-1/2位数字多用表、任意波形发生器、脉冲发生器和电子负载…...

Linux——fork复制进程

1)shell: 在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(command interpreter,命令解析器)。它类似于DOS下的COMMAND.COM和后来的cmd.exe。它接收用户命令&…...

李廉洋:4.10黄金原油晚间走势最新分析及策略。

鉴于美联储官员对1月和2月通胀数据反应不足,3月通胀数据过热可能导致其反应过度的风险更大。美联储试图避免根据一两个数据点来制定政策,但今年迄今为止经济活动的韧性意味着,在年中降息的理由取决于通胀是否恢复自去年下半年以来的稳步下降趋…...

【头歌-Python】字符串自学引导

禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137517279 参考教程:B站视频讲解——https://space.bilibili.com/3546616042621301 如果代码存在问题,麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 字符串自学引导 …...

44-技术演进(下):软件架构和应用生命周期技术演进之路

应用、系统资源、应用生命周期管理这 3 个维度,构成了我们对云的所有诉求。 我会介绍下应用维度和应用生命周期管理维度的技术演进。 我们就先来看下软件架构的演进之路。 软件架构的演进 软件架构技术演进如下图所示: 单体架构 在单体架构中&#xff…...

【C++】C++中的list

一、介绍 官方给的 list的文档介绍 简单来说就是: list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中…...

uniapp:Hbuilder没有检测到设备请插入设备或启动模拟器的问题解决

问题 使用模拟器调试运行项目时,出现以下提示,“没有检测到设备,请插入设备或启动模拟器后点击刷新再试”。排查了一天最终找到原因。 解决 已确认模拟器是已经正常启动,并且Hbuilder设置中的adb路径和端口都配置没有问题&#…...

基于RBF的时间序列预测模型matlab代码

整理了基于RBF的时间序列预测模型matlab代码, 包含数据集。采用了四个评价指标R2、MAE、MBE、MAPE对模型的进行评价。RBF模型在数据集上表现非常好。 训练集数据的R2为:0.99463 测试集数据的R2为:0.96973 训练集数据的MAE为:0.…...

Minecraft服务器技能管理自动化:mcpskills-cli命令行工具实战指南

1. 项目概述与核心价值最近在折腾一些自动化脚本,特别是涉及到Minecraft服务器管理和技能系统的时候,发现很多操作还是得手动进后台敲命令,或者依赖一些图形化面板,效率上总感觉差了点意思。直到我发现了alibiinformationsuperhig…...

基于LLM的AI新闻智能体:自动化信息采集与周报生成实战

1. 项目概述:一个能自动追踪AI新闻的智能体 最近在GitHub上看到一个挺有意思的项目,叫 ai-news-weekly-agent 。光看名字,你大概能猜到它是个和AI新闻相关的自动化工具。没错,它的核心目标就是扮演一个“AI新闻周刊编辑”的角色…...

Unity角色控制器深度解析:从原理到实战,打造3A级移动手感

1. 项目概述:一个为游戏角色注入灵魂的控制器如果你在游戏开发领域摸爬滚打过,尤其是涉足过3D动作、冒险或者平台跳跃类项目,那你一定对“角色控制器”这个概念又爱又恨。爱的是,它是连接玩家输入与游戏世界反馈的核心桥梁&#x…...

AI编码工作流实战:从工具整合到工程落地的系统指南

1. 项目概述:从“AI编码工作流”说起 最近在GitHub上看到一个挺有意思的项目,叫 nicksp/ai-coding-workflow 。光看名字,你可能觉得这又是一个关于“如何用AI写代码”的泛泛而谈。但作为一个在软件工程一线摸爬滚打了十多年的老码农&#x…...

Svelte动态光标实现:提升Web应用交互体验的完整方案

1. 项目概述:一个为Svelte应用注入灵魂的交互光标在Web应用的世界里,细节决定体验。我们早已习惯了那个千篇一律的箭头指针,它精准、高效,但缺乏情感和上下文。当用户点击一个按钮、悬停在一个链接上,或者在一个可拖拽…...

归档日志较多导致磁盘使用率100%,数据库停止服务

文章目录环境症状问题原因解决方案环境 系统平台:银河麒麟 (鲲鹏) 版本:9.0 症状 数据库服务停止,对外停止响应。 问题原因 服务器磁盘使用率100%,数据库服务因此停止。 解决方案 1、检查服务器磁盘…...

pgwatch2存储后端对比:PostgreSQL vs InfluxDB vs Prometheus – 选择最适合你的监控方案

pgwatch2存储后端对比:PostgreSQL vs InfluxDB vs Prometheus – 选择最适合你的监控方案 【免费下载链接】pgwatch2 PostgreSQL metrics monitor/dashboard 项目地址: https://gitcode.com/gh_mirrors/pg/pgwatch2 pgwatch2是一款灵活的PostgreSQL指标监控和…...

DevUI布局系统完全指南:响应式设计的终极解决方案

DevUI布局系统完全指南:响应式设计的终极解决方案 【免费下载链接】ng-devui Angular UI Component Library based on DevUI Design 项目地址: https://gitcode.com/DevCloudFE/ng-devui DevUI布局系统是Angular UI组件库中的核心功能,为开发者提…...

IoTDB与TimechoDB深度解析

全球物联网设备将在2025年突破416亿台,每天产生79.4ZB的数据,相当于8000多万个1TB硬盘才能装下。面对这场数据海啸,传统数据库纷纷“侧漏”,时序数据库成为企业数字化升级的“救生艇”。 本文将从五大核心维度,系统剖…...

ThreadLocal原理与内存泄漏防范

前言 在现代软件开发中,ThreadLocal原理与内存泄漏防范是一个非常重要的技术点。本文将从原理到实践,带你深入理解这一技术,并通过完整的代码示例帮助你快速掌握核心知识点。 核心概念 基本原理 ThreadLocal原理与内存泄漏防范的核心在于理解…...