14 结构性模式-适配器模式

news2025/4/22 1:44:15
1 适配器模式介绍

适配器模式(adapter pattern )的原始定义是:将类的接口转换为客户期望的另一个接口,适配器可以让不兼容的两个类一起协同工作。
在这里插入图片描述

2 适配器模式原理

在这里插入图片描述
在这里插入图片描述

3 适配器模式应用实例

在这里插入图片描述

/**
 * SD卡接口
 **/
public interface SDCard {

    //读取SD卡
    String readSD();
    //写入SD卡
    void writeSD(String msg);
}
/**
 * SD卡实现类
 **/
public class SDCardImpl implements SDCard {

    @Override
    public String readSD() {
        String msg = "sd card reading data";
        return msg;
    }

    @Override
    public void writeSD(String msg) {
        System.out.println("sd card write data : " + msg);
    }
}
/**
 * TF卡接口
 **/
public interface TFCard {

    //读取TF卡
    String readTF();
    //写入TF卡
    void writeTF(String msg);
}
public class TFCardImpl implements TFCard {
    @Override
    public String readTF() {
        String msg = "tf card reading data";
        return msg;
    }

    @Override
    public void writeTF(String msg) {
        System.out.println("tf card write data : " + msg);
    }
}
/**
 * 适配器类(SD兼容TF)
 **/
public class SDAdapterTF  extends TFCardImpl implements SDCard{

    @Override
    public String readSD() {
        System.out.println("adapter read tf card");
        return readTF();
    }

    @Override
    public void writeSD(String msg) {
        System.out.println("adapter write tf card");
        writeTF(msg);
    }
}
/**
 * 电脑类
 **/
public class Computer {

    public String read(SDCard sdCard){
        String data = sdCard.readSD();
        return data;
    }
}
public class Client {

    public static void main(String[] args) {

        Computer computer = new Computer();
        SDCard sdCard = new SDCardImpl();
        String read = computer.read(sdCard);
        System.out.println(read);

        System.out.println("=====================");
        SDAdapterTF adapterTF = new SDAdapterTF();
        System.out.println(computer.read(adapterTF));
    }
}
4. 对象适配器模式

在这里插入图片描述

/**
 * 对象适配器-组合形式
 **/
public class SDAdapterTF2  implements SDCard {

    private TFCard tfCard;

    public SDAdapterTF2(TFCard tfCard) {
        this.tfCard = tfCard;
    }

    @Override
    public String readSD() {
        System.out.println("adapter read tf card");
        return tfCard.readTF();
    }

    @Override
    public void writeSD(String msg) {
        System.out.println("adapter write tf card");
        tfCard.writeTF(msg);
    }
}
public class Client {

    public static void main(String[] args) {

        Computer computer = new Computer();
        SDCard sdCard = new SDCardImpl();
        System.out.println(computer.read(sdCard));

        System.out.println("=======================");
        TFCard tfCard = new TFCardImpl();

        SDAdapterTF2 adapterTF2 = new SDAdapterTF2(tfCard);
        System.out.println(computer.read(adapterTF2));
    }
}
5适配器模式总结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【Docker】什么是Docker?看这一篇干货文章就够了!

目录 前言 容器技术的起源 容器技术 vs 虚拟机 什么是容器 什么是docker 如何使用docker docker的底层实现 总结 前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或…

斯德博STOBER伺服驱动器维修MDS5040A

STOBER斯德博驱动器常见故障维修如下: 当伺服驱动器给出移动指令而机床不移动,则伺服器维修故障原因可能是:机械传动卡住。如果故障发生在垂直轴控制时,则故障为伺服电动机的电磁制动回路。伺服电动机及动力线有断相故障或伺服电…

2024通信保研-电磁场电磁波复习

标量场的梯度的旋度恒等于0,旋度的散度等于0。 旋度: rot ⁡ F ( e x ∂ ∂ x e y ∂ ∂ y e z ∂ ∂ z ) ( e x F x e y F y e z F z ) e x ( ∂ F z ∂ y − ∂ F y ∂ z ) e y ( ∂ F x ∂ z − ∂ F z ∂ x ) e x ( ∂ F y ∂ x − ∂ F x …

『Jmeter入门万字长文』 | 从环境搭建、脚本设计、执行步骤到生成监控报告完整过程

『Jmeter入门万字长文』 | 从环境搭建、脚本设计、执行步骤到生成监控报告完整过程 1 Jmeter安装1.1 下载安装1.2 Jmeter汉化1.2.1 临时修改1.2.2 永久修改 1.3 验证环境 2 测试对象2.1 测试对象说明2.2 测试对象安装2.2.1 下载安装2.2.2 启动测试对象服务2.2.3 访问测试对象2.…

JAVA 版多商家入驻 直播带货 商城系统 B2B2C 商城源码之 B2B2C产品概述 商城免费搭建

涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …

美团圈圈私域社群app拉新怎么做,申请推广渠道

首先说下美团私域社群app拉新申请渠道,可以通过“聚量推客”进行申请聚量推客首码邀请:000000 1、流程:用户点击活动专属链接进入扫码进群页面,长按二维码进入美团圈 圈多重福利群,用户首次进群且保持 10 天不退群即符…

地方门户系统源码 同城信息系统源码 家政外卖跑腿同城信息门户源码

地方门户系统源码 同城信息系统源码 家政外卖跑腿同城信息门户源码 系统介绍: 一:系统 后台设置:菜单列表 管理员管理:角色管理,操作日志,禁止访问IP段列表,管理员登录日志 二:设置 基础设置:站点设置,附件设置&a…

转岗项目经理后,我是如何分析需求的

项目经理有一项工作就是需求分析,需求的本质是根据认知进行假设,然后给出判断。如果需求分析的结果出了问题,那么产品也必然会失败。本文针对如何进行需求分析展开分析,希望能对你有所启发。 一、什么是需求 为什么要明确需求的…

笔记本触摸板怎么开?教你5个实用方法!

“新买了一个笔记本,但是触摸板一直无法打开,应该怎么进行操作呢?有什么方法可以打开笔记本触摸板吗?” 为了方便办公和使用笔记本,笔记本电脑上通常都会有一个触摸板。我们可以用它代替鼠标,更好地进行操作…

可视化沟通解析

如果我们去吃饭看到如下菜单 我想对于当事人而言,这个绝对不是点菜吃饭,而是一场韩语考试。 但是我们看到如下这个菜单会怎么样 如果我们看到这种菜单,即使我们不知道菜的名字我们也能很快的做出我们想要的选择,那样得到的菜不会…

JVM进阶(2)

一)方法区: java虚拟机中有一个方法区,该区域被所有的java线程都是共享,虚拟机一启动,运行时数据区就被开辟好了,官网上说了方法区可以不压缩还可以不进行GC,JAVA虚拟机就相当于是接口,具体的HotSpot就是虚…

IDEA 2023.2.2 使用 Scala 编译报错 No scalac found to compile scala sources

一、问题 scala: No scalac found to compile scala sources 官网 Bug 链接 二、临时解决方案 Incrementality Type 先变成 IDEA 类型 Please go to Settings > Build, Execution, Deployment > Compiler > Scala Compiler and change the Incrementality type to …

STM32MP157D BSP

一,全志R16、IMX6ULL和STM32MP157D启动相关 1,IMX6ULL是EMMC启动后,通过uboot fat命令的load进内存进行启动测试 2,openedv应该也是参考的官方的板子,类似调试口等均应该是一致的,所以目前就是用正点原子…

网络扫描与网络监听

前言:前文给大家介绍了网络安全相关方面的基础知识体系,以及什么是黑客,本篇文章笔者就给大家带来“黑客攻击五部曲”中的网络扫描和网络监听 目录 黑客攻击五部曲 网络扫描 按扫描策略分类 按照扫描方式分类 被动式策略 系统用户扫描 …

干货满满,上传多个文件秒变微信翻页电子书

亲们,你们还在为找不到好的制作电子书网站烦恼吗?今天给大家分享一个超级实用的神器! 这个神器就是——FLBOOK在线制作电子杂志平台!如果你有排版好的电子文档,就能一键上传多个文件秒变微信翻页电子书,是不…

市面上最好的 9 款 Android 数据恢复软件榜单

Android 是世界上最受欢迎的智能手机操作系统,拥有超过 20 亿的用户群,这是一个巨大的数字,而且还在不断增加。然而,随着用户数量的不断增加,Android数据丢失的问题也日益增多。Android 确实提供了 Google Drive 和 Go…

UWB技术在定位系统中的革新应用

超宽带技术(Ultra-Wideband, UWB)的崛起为定位系统领域带来了前所未有的机遇。其亚米级别的高精度定位、强大的穿透能力以及高速数据传输的特性,使得UWB在室内和室外定位系统中得以广泛应用。本文将深入探讨UWB技术在定位系统中的应用&#x…

PyTorch卷积神经网络各层实现与介绍

本文将讲解,PyTorch卷积神经网络各层实现与介绍,包括:基本骨架–nn.Module的使用、卷积操作、卷积层、池化层、激活函数、全连接层的介绍。 😜 对于相关原理,可以跳转👉卷积神经网络CNN各层基本知识 &…

2023.10.26 关于 CAS 和 ABA 问题

目录 CAS 操作 执行过程 CAS 应用场景 实现原子类 实现自旋锁 ABA 问题 CAS 操作 全称 Compare and swap ,译为 比较并交换 执行过程 我们假设内存中的原始数据 V,旧的预期值 A,需要修改的新值 B 比较 A 与 V 是否相等如果比较相等&…

SpringBoot日志+SpringMVC+UUID重命名文件+Idea热部署

目录 【SpringBoot日志】 什么是日志,日志的作用 关于日志的基本信息,又有哪些呢? 关于日志的级别 Springboot内置SLF4J【门面模式】 和 logback【日志框架】 在配置文件中可以设置日志级别【以.yml为例】 SpringBoot 持久化的保存日…