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

设计模式再探——适配器模式

目录

  • 一、背景介绍
  • 二、思路&方案
  • 三、过程
    • 1.适配器模式简介
    • 2.适配器模式的类图
    • 3.适配器模式代码
    • 4.适配器模式,类适配器模式和对象的对比
    • 5.适配器模式终极奥秘
  • 四、总结
  • 五、升华

一、背景介绍

最近公司在对业务模型做构建的时候,涉及到和三方系统的对接,这让我想到了适配器模式,而如何正确理解和运用适配器模式,相信这篇文章会给你更深入的体会。

二、思路&方案

  • 1.适配器模式简介
  • 2.适配器模式的类图
  • 3.适配器模式代码
  • 4.适配器模式,类适配器模式和对象的对比
  • 5.适配器模式终极奥秘

三、过程

1.适配器模式简介

适配器模式(adapter):将一个类的接口转换成客户希望的另一个接口。Adapter模式将原本由于接口不兼容而不能一起工作的类可以一起工作。

2.适配器模式的类图

在这里插入图片描述

3.适配器模式代码

package com.a7DesignPattern.a2StructuralType.a01Adapter;/*** 功能描述:** @Author:makang* @Date: 2021/5/3 15:40*/
public class Client {public static void main(String[] args) {//这里通过配置文件+反射实现具体要new的子类,以遵循开闭原则Target target = new Target();target.Request();target = new Adapter();target.Request();}
}
package com.a7DesignPattern.a2StructuralType.a01Adapter;/*** 功能描述:** @Author:makang* @Date: 2021/5/3 15:26*/
public class Target {public void Request(){System.out.println("target的Request方法输出");}
}
package com.a7DesignPattern.a2StructuralType.a01Adapter;/*** 功能描述:** @Author:makang* @Date: 2021/5/3 15:35*/
public class Adapter extends Target {Adaptee adaptee = new Adaptee();@Overridepublic void Request() {
//        System.out.println("Adapter的Request方法输出内容");adaptee.SpecificRequest();}
}
package com.a7DesignPattern.a2StructuralType.a01Adapter;/*** 功能描述:** @Author:makang* @Date: 2021/5/3 15:34*/
public class Adaptee {public void SpecificRequest(){System.out.println("adaptee的SpecificRequest方法输出");}
}

4.适配器模式,类适配器模式和对象的对比

通过java可以模拟实现类适配器模式;

  • 4.1.用一个抽象类和一个接口当做类的两个父类
  • 4.2.将抽象类的抽象方法体(名字、入参、出参)和接口的方法体(名字、入参、出参)一致
  • 4.3.抽象类和接口分别用在不同的地方
  • 4.4.让给一个类分别继承抽象类,和实现接口;从而达到在不同地方,适配成相同实现的效果
    在这里插入图片描述

5.适配器模式终极奥秘

什么时候考虑使用适配器模式? 永远都用不到适配器模式的时候就是对适配器模式最好的运用。

四、总结

  • 1.适配器属于一种亡羊补牢的手法,但是也总比亡羊不补来的要好
  • 2.适配器真正带给我们的思考,是在让我们强化前期的设计,以及对于七大原则的严格遵守
  • 3.如果非得牵强的找一些场景的话,可以用在对接三方系统的场景上

五、升华

模式背后的逻辑,要在宏观的层面去了解它,你就会发现不识庐山真面目的意境。

相关文章:

设计模式再探——适配器模式

目录 一、背景介绍二、思路&方案三、过程1.适配器模式简介2.适配器模式的类图3.适配器模式代码4.适配器模式,类适配器模式和对象的对比5.适配器模式终极奥秘 四、总结五、升华 一、背景介绍 最近公司在对业务模型做构建的时候,涉及到和三方系统的对…...

【无标题】光伏逆变器的IEC62109测试,逆变器IEC62109测试项目

光伏逆变器的IEC62109测试,逆变器IEC62109测试项目 逆变器又称电源调整器,根据逆变器在光伏发电系统中的用途可分为独立型电源用和并网用二种。根据波形调制方式又可分为方波逆变器、阶梯波逆变器、正弦波逆变器和组合式三相逆变器。对于用于并网系统的…...

Windows用VM虚拟机安装MacOS Ventura 13.6系统全流程教程(附资源)

安装成果: 所需容量:至少40GB的硬盘空间,推荐80GB以上。 所需资源 VMware虚拟机激活密钥:VMware Workstation Pro 17.0.2MacOS Ventura 13.6的ISO镜像MacOS的解锁工具卡顿优化工具:beamoff 有人反馈说需要能用的ISO镜…...

PHP7和PHP8的新特性

PHP 7 新特性: 改进的性能:最显著的变化就是性能提升,据官方报告,PHP 7 的速度是 PHP 5.6 的两倍。 标量类型声明:PHP 7 添加了 int, float, string 和 bool 四种标量类型声明,这使得函数可以通过预定义参…...

mysql按照日期分组统计数据(date_formatstr_to_date)

学习链接 mysql按照日期分组统计数据 博主-山茶花开时的 【Mysql专栏学习】 mysql按照日期分组统计数据 Mysql的date_format函数想必大家都使用过吧,一般用于日期时间转化,如下所示 # 可以得出 2023-01-01 08:30:50 select DATE_FORMAT(2023-01-01…...

【C++程序员必修第一课】C++基础课程-07:switch 分支选择

1 本课主要内容: 为什么需要有 switch 多分支选择?应用场景在哪里?switch 多分支选择的应用讲解:case, break,default 2 主要知识点: 为什么需要有 switch 多分支选择 思考一个问题,数学老师需要统计班上同…...

initramfs介绍

initramfs介绍 什么是initramfs? initramfs(Initial RAM Filesystem)是一种临时文件系统,它在Linux系统启动过程中被加载到内存中。它包含了必要的驱动程序、工具和配置文件,用于在内核启动后挂载真实的根文件系统之…...

数据结构与算法:二分查找(心得)

前言 前些天我做了一道题目,题目中要求使用二分查找,我便按照我心中的二分查找,信心满满的提交上去了。结果发现无限循环,后面我便去查阅了资料 二分查找的条件 用于查找的内容需要是有序的查找的数量只能是一个 二分查找的二种方…...

项目管理之分析项目特点的方法

在管理项目时,了解项目的目标和实现方法可以帮助我们更好地规划和执行项目。根据项目的目标和实现方法的不同,可以将项目分为四种类型:地、水、火和气。 对于工程项目,采用基于活动任务的计划管理方法,使用活动网络图…...

MyBatisPlus(二十一)乐观锁

使用场景 用于当有多个用户同时修改同一条数据的时候,只允许有一个修改成功。 实现原理 使用一个字段,用于记录数据的版本。 当修改数据时,会去检测当前版本是否是正在修改的版本,同时修改成功后会把 版本号 1。 实现方式 配…...

node 通过axios发送post请求(FormData)

方案一: const axios require(axios) const FormData require(form-data) const fs require(fs)const sdUpscaleOnAzure async (req, res) > {const data new FormData()data.append(image, fs.readFileSync(/temp/ai/sd/download/1.png))let config {hea…...

2024 王道考研-数据结构

第二章 线性表算法题(线性表的顺序表示) 二、综合应用题 01.从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位 置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。 算法思想:搜索整个顺序表&#xf…...

【疯狂Java讲义】Java学习记录(使用jar命令打包)

jar命令 把多个文件打包成一个压缩包——这个压缩包和WinZip的压缩格式是一样的。 区别在于jar压缩的文件默认多一个META-INF的文件夹,该文件夹里包含一个MANIFEST.MF的文件(清单)。 通常来说,得到的压缩包有3种(压缩格…...

数据库第一、二章作业

只为记录与分享 第1,2章作业.xls 题量: 34 满分: 100 一. 单选题(共34题) 1. (单选题)在数据库中,下列说法( )是不正确的。 A. 数据库避免了一切数据的重复B. 若系统是完全可以控制的,则系统可确保更新…...

将数组拆分成斐波那契序列

题目描述 示例 代码如下&#xff1a; public class SplitIntoFibonacci {LinkedList<Integer> res new LinkedList<>();public List<Integer> splitIntoFibonacci(String num) {if(num.length() < 3) return res;if(dfs(num, 0)) return res;return new…...

【Linux】:权限

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux的基础知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数…...

8年软件测试工程师感悟——写给还在迷茫中的朋友

这两天和朋友谈到软件测试的发展&#xff0c;其实软件测试已经在不知不觉中发生了非常大的改变&#xff0c;前几年的软件测试行业还是一个风口&#xff0c;随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业&#xff0c;目前软件测试行业“缺口”已经基本饱和。当然&a…...

CleanMyMac苹果电脑清理软件是智商税吗?最全评测价格、清理效果一次说清

这是一篇CleanMyMac最全评测&#xff01;价格、清理效果一次说清&#xff0c;告诉你它真不是智商税! 升级Ventura系统之前&#xff0c;我用的是CleanMyMac X绿色版&#xff08;绝不提倡这个行为&#xff09;。更新到Ventura之后&#xff0c;之前很多绿色软件失效&#xff0c;浪…...

【pytorch 中 torch.max 和 torch.argmax 的区别】

torch.max 和 torch.argmax 的区别 1.torch.max torch.max(input, dim, maxNone, max_indicesNone, keepdimFalse) -->> (Tensor, LongTensor) 作用&#xff1a;找出给定tensor的指定维度dim上的上的最大值&#xff0c;并返回最大值在该维度上的值和位置索引。 应用举…...

无效的 page.json [“window“] 页面.json配置了“window“: {“disableScroll“: true}

问题&#xff1a;启动小程序时报错 无效的 page.json ["window"] 页面 解决&#xff1a; app.json 全局配置才使用window对象&#xff0c;在单独的页面直接写disableScroll:true即可 //app.json中添加&#xff0c;window里面添加就可以了 "window": { …...

深入解析DW_apb_i2c与TMP75的寄存器交互:从配置到温度读取

1. 认识TMP75温度传感器与DW_apb_i2c控制器 TMP75是德州仪器&#xff08;TI&#xff09;推出的一款高精度数字温度传感器&#xff0c;采用I2C接口通信&#xff0c;内置12位ADC&#xff0c;分辨率可达0.0625C。我在多个嵌入式项目中都用过它&#xff0c;实测稳定性相当不错。它的…...

PyCharm配置PySide6工具链避坑指南:解决虚拟环境路径、命令报错那些事儿

PyCharm配置PySide6工具链避坑指南&#xff1a;解决虚拟环境路径、命令报错那些事儿 刚接触PySide6开发的朋友&#xff0c;十有八九会在PyCharm配置Designer、UIC和RCC工具时踩坑。明明照着教程一步步操作&#xff0c;却总是遇到"程序不存在"、"命令执行错误&qu…...

国产化服务器上,手把手教你用TongHttpServer V6.0搭建静态资源站(含麒麟/统信系统适配指南)

国产化环境实战&#xff1a;TongHttpServer V6.0静态资源站部署全攻略 在信创产业快速发展的背景下&#xff0c;国产化软硬件生态已逐步成熟。对于需要在国产CPU和操作系统环境中部署Web服务的工程师而言&#xff0c;选择一款性能优异且兼容性良好的国产Web服务器软件至关重要。…...

通信萌新们注意了!今天咱们玩点刺激的——用MATLAB手搓各种QAM调制的性能对比。准备好你的小本本,咱们边写代码边分析,包教包会

基于4QAM&#xff0c;16QAM&#xff0c;64QAM调制方式下经过AWGN信道的性能分析 均包含加噪声前后的星座图、误码率和误符号率性能对比&#xff0c;该程序一共10张仿真图&#xff0c;可学习性非常强先上硬货&#xff0c;看看怎么生成4QAM的星座图。掏出这段代码&#xff1a; M …...

REPENTOGON全面安装指南:深度解锁以撒结合脚本扩展器功能

REPENTOGON全面安装指南&#xff1a;深度解锁以撒结合脚本扩展器功能 【免费下载链接】REPENTOGON Script extender for The Binding of Isaac: Repentance 项目地址: https://gitcode.com/gh_mirrors/re/REPENTOGON 想要为《以撒的结合&#xff1a;悔改》带来革命性的游…...

百度网盘提取码智能查询工具:3秒破解资源访问密码的终极方案

百度网盘提取码智能查询工具&#xff1a;3秒破解资源访问密码的终极方案 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘加密资源而困扰吗&#xff1f;当你急需下载学习资料、软件安装包或娱乐资源时&#xff0…...

基于YOLOV8的车辆检测系统:快速上手与实用功能

基于YOLOV8的车辆检测系统 基于深度学习的车辆检测系统有数据集 模型已经训练好 直接用即可 报告 30r 就是售价 包搭配环境 远程运行跑通程序 本项目已经训练好模型&#xff0c;配置好环境可直接使用&#xff0c;运行效果见图像&#xff08;可找我要演示视频&#xff09; 项…...

MFC界面现代化---自定义标题栏与控件美化实战

1. 为什么需要MFC界面现代化改造 很多老牌企业软件和工业控制系统都基于MFC框架开发&#xff0c;这些系统通常运行了十几年甚至更久。我接手过不少这类项目&#xff0c;最直观的感受就是界面实在太"复古"了——灰底蓝框的窗口、生硬的按钮、像素感明显的图标&#xf…...

实战起步:用快马生成数据分析项目的python环境与示例代码脚手架

今天想和大家分享一个数据分析项目的快速启动方案。作为一个经常需要处理各种数据的人&#xff0c;我发现每次开始新项目时&#xff0c;重复搭建环境和初始化项目结构特别浪费时间。后来发现了InsCode(快马)平台&#xff0c;它帮我解决了这个问题。 项目初始化脚本 这个脚本会自…...

CodeSys自定义HTML5控件:从零构建到工程部署的实战指南

1. 为什么需要自定义HTML5控件&#xff1f; 在工业自动化领域&#xff0c;CodeSys作为主流的PLC编程环境&#xff0c;其WebVisu功能允许工程师创建可视化界面。但默认控件库往往无法满足特定需求&#xff0c;比如&#xff1a; 需要展示实时数据曲线图而非简单数值要求特殊交互…...