适配器模式

news2024/11/18 23:38:07

思考适配器模式

适配器模式通过转换已有的接口,达成目标需要的接口
适配器模式还可以将多种差异化接口适配成同一接口做统一输出

1.适配器模式的本质

适配器模式的本质是:转换匹配,复用功能。

适配器通过转换调用已有的实现,从而能把已有的实现匹配成需要的接口,使之能满足客户端的需要。也就是说转换匹配是手段,而复用已有的功能才是目的。

在进行转换匹配的过程中,适配器还可以在转换调用的前后实现一些功能处理,也就是实现智能的适配。

2.何时选用适配器模式

建议在以下情况中选用适配器模式。

  • 如果你想要使用一个已经存在的类,但是它的接口不符合你的需求,这种情况可以使用适配器模式,来把已有的实现转换成你需要的接口。

  • 如果你想创建一个可以复用的类,这个类可能和一些不兼容的类一起工作,这种情况可以使用适配器模式,到时候需要什么就适配什么。

  • 如果你想使用一些已经存在的子类,但是不可能对每一个子类都进行适配,这种情况可以选用对象适配器,直接适配这些子类的父类就可以了。

3.实现

对象适配

模拟实现完第一版功能,又完成了第二版功能,想兼容第一版功能

/**
 * @description:被适配类
 */
public class Adaptee {

    public void first(){
        System.out.println("第一版功能--------------");
    }
}

/**
 * @description:要适配成的目标类
 */
public interface Target {

    /**
     * 第二版功能
     */
    void second();
}

/**
 * @description:适配器
 */
public class ObjectAdapter implements Target{
    @Autowired
    private Adaptee adaptee;

    public ObjectAdapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public void second() {
        //实际调用第一版功能
        adaptee.first();
    }
}

测试

public class Client {

    public static void main(String[] args) {
        Target adapter = new ObjectAdapter(new Adaptee());
        //调用第二版功能
        adapter.second();
    }
}

类图
在这里插入图片描述

接口适配

修改适配器类

/**
 * @description:适配器
 */
public class ObjectAdapter extends Adaptee implements Target{

    @Override
    public void second() {
        //实际调用第一版功能
        super.first();
    }
}

测试

public class Client {

    public static void main(String[] args) {
        Target adapter = new ObjectAdapter();
        //调用第二版功能
        adapter.second();
    }
}

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

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

相关文章

【Spring】——4、使用@Scope注解设置组件的作用域

📫作者简介:zhz小白 公众号:小白的Java进阶之路 专业技能: 1、Java基础,并精通多线程的开发,熟悉JVM原理 2、熟悉Java基础,并精通多线程的开发,熟悉JVM原理,具备⼀定的线…

VCED:学习Jina的简单操作

文章目录VCED:学习Jina的简单操作在pycharm里连接docker环境几个简单的jina demoimagetextvideoVCED:学习Jina的简单操作 在pycharm里连接docker环境 在pycharm里找到docker环境 New一个环境 在docker里进入terminal,找到python 位置 成功得到decker环境 运行jina…

004_步进电机实验

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。本章主要从步进电机的结构、工作原理、电机参数分别介绍,最后通过实验来实现步进电机运动的简单控制。本章所要实现的功能是:通过 ULN2003 驱动模块控制 28BYJ48 步进电机运行方向及速度&…

bugku-web-社工-初步收集

题目首页 社工又有杂项的存在 打开题目 小时候可能特感兴趣的网站 目录扫描一下 dirsearch 得到一个管理员后台登录网站 但是需要密码 再回到起始页面 存在一个下载点 可以操作 下载得到一个压缩包 解压打开 是一个小插件 尝试登录 同时 打开wireshark进行流量截取…

Nacos安装指南

Nacos安装指南 1.Windows安装 开发阶段采用单机安装即可。 1.1.下载安装包 在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码: GitHub主页:https://github.com/alibaba/nacos GitHub的Release下载…

Monaco Editor教程(十六):缩略图minimap的配置详解

背景 缩略图 (Minimap) 是一种常见的用于快速预览和探索的工具,可作为导航辅助用户探索大规模图。 在大文件的阅读和编辑中,能够起到很好的导航作用,并且缩略图能够显示文件结构的大致轮廓,使开发人员能够快速知道对应的编辑位置…

WordPress重新安装的几种方法(2022年新版教程)

我们在建网站的过程中,可能出于某些原因会把网站重装,例如网站中病毒了、网站做的不满意,重头开始。本文会给大家分享一下2022年可行的重装WordPress网站方法。 1 重装WordPress的方法 方法一:重置数据库 方法二:宝塔面…

【MySQL】MySQL基础、详细总结

数据库Mysql 内容管理数据库基础什么是DB、DBMS、DBS、DBA?什么是元组、码、候选码、主、外码(键)、(非)主属性?主、外码的区别?为什么不推荐使用外码和级联 ?【分布式高并发】什么是…

Servlet规范之部署描述符

Deployment Descriptor 文章是对 JSR-000340 JavaTM Servlet 3.1 Final Release的Java™ Servlet规范的翻译,尚未校准 文章目录Deployment Descriptor部署描述符元素部署描述符的处理规则部署描述符部署描述符示意图web-app元素description Elementdisplay-name Ele…

从零开始学前端:json对象,冒泡排序 --- 今天你学习了吗?(JS:Day15)

从零开始学前端:程序猿小白也可以完全掌握!—今天你学习了吗?(JS) 复习:从零开始学前端:字符串、数组的方法 — 今天你学习了吗?(JS:Day12/13/14&#xff09…

范式建模维度建模 及结合BW的一些理解

用了几年BW了,时不时会想,BW为什么要这么设计啊,有时候用的可真麻烦,最近研究了下两种常见的建模理论,有了自己的一点感悟,我们从头开始,有很多资料是从大佬那里摘录的,就不一一列举了 一、范式…

DOPA-PEG-azide,Dopamine-PEG-N3,多巴胺PEG叠氮用于点击化学

多巴胺-聚乙二醇-叠氮(DOPA-PEG-azide,Dopamine-PEG-N3)该试剂具有更好的水溶性,它所属分类为Azide PEG Dopamine PEG。 peg试剂的分子量均可定制,有:2k、5k、3.4k、10k、20k、1k 。其质量控制为95%&#…

基于Matlab模拟用于天气观测的极化雷达回波(附源码)

目录 一、雷达定义 二、天线方向图 四、雷达脉冲合成 五、天气雷达力矩估计 六、仿真结果 6.1反射率 6.2 径向速度 6.3 频谱宽度 6.4 差分反射率 6.5 相关系数 6.6 差分相位 七、总结 八、程序 本示例展示了如何模拟满足天气观测要求的极化多普勒雷达回波。雷达在天…

柯桥增值税留抵如何退税?

今年,国家税务总局出台了“增值税期末留底退税”政策,这无疑对一些现金流缺乏的企业又是一重大利好呀! 那么问题来了,咱们会计该如何操作领回这一部分钱呢? 接下来跟着豆哥一块儿操作退税吧~ 政策解读 重点提醒&…

驱动——LED灯循环闪烁

使用结构体形式对寄存器地址进行映射,实现3盏LED灯的循环点亮 1、创建LED灯点亮所需要的GPIO寄存器的结构体,并对寄存器地址进行宏定义 2、①通过ioremap函数将物理地址映射为虚拟地址 void* ioremap(phys_addr_t offset, size_t size) 函数功能&…

Mysql主从复制出现connecting

主从同步时出现Slave_IO_Running:Connecting首先解决Slave_IO_Running和Slave_SQL_Running是no的问题,原因是一台虚拟机是由另一台虚拟机复制过来的,就会导致uuid是一样的,需要先修改server的uuid,具体请查阅相关资料。…

【FME实战教程】001:FME2020中文安装图文教程(附安装包下载)

文章目录1. 安装license2. 安装FME Desktop3. 安装中文语言4. FME软件下载地址1. 安装license 打开软件安装包中的fme-flexnet-win-x64.msi,如下图所示: 点击Next。 点击Next。 单击install。 点击finish,完成。 (1)修…

pytorch入门教程(小土堆

pytorch入门教程、一些基础函数的概念(参考代码),主要是带着读了一遍pytorch官方文档、另外推荐一个网站 www.paperswithcode.com,感觉很厉害的样子。 P5. PyTorch加载数据初认识_哔哩哔哩_bilibili import torch torch.cuda.is_a…

年产10000吨即食型大头菜工厂设计

目 录 摘 要 I ABSTRACT II 第1章 绪论 1 1.1即食大头菜发展现状及市场前景 1 1.1.1世界即食大头菜发展的特点与趋势 1 1.1.2我国即食大头菜发展现状 1 1.1.3即食大头菜的生产现状及前景展望 2 1.2专家点评 3 第2章 厂址选择 5 2.1厂址选择依据及范围 5 2.1.1选址依据 5 2.1.2选…

3.46 OrCAD软件怎么输出物料清单BOM表格?

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验&a…