JAVA设计模式-适配器模式

JAVA设计模式-适配器模式

介绍

适配器模式是一种结构型模式,它主要解决接口之间的兼容问题。当我们需要使用某个类的接口时,但是这个类的接口目前并不符合我们使用需求,不能直接使用,那我们可以采取调整类和接口的方式,但是如果这个接口是第三方提供的,修改不了或者类和接口目前大量使用,并且使用稳定,不能轻易改动时,我们可以使用适配器模式,在不改动这个类的前提下来满足目前系统的需求。生活中也有例子,例如:生活中m2硬盘转SATA接口的转换卡、美版、港版与国行的电源适配器。

图例

JAVA设计模式-适配器模式

角色

  1. 目标接口(Target):定义满足目前系统需求的接口,可以是抽象类或者接口。
  2. 适配者类(Adapter):与目前系统需求不兼容的类,需要被适配的类。
  3. 适配器类(Adapter):实现目标抽象类或者接口和适配者类之间的转换。
  4. 客户类(Client):调用目标接口。

优点

  1. 将目标类和适配者类解耦,不需要改变原有代码即可满足目前需求。
  2. 具有较高的灵活性和可扩展性。

代码示例-以m2硬盘转SATA接口为例

InterfaceSata(Target)

/**
 * All rights Reserved, Designed By monkey.blog.xpyvip.top
 *
 * @version V1.0
 * @Package com.xpyvip.designpattern.adapter
 * @Description: SATA接口
 * @Author: xpy
 * @Date: Created in 2022年10月04日 7:52 下午
 */
public interface InterfaceSata {

    String installInterfaceSata();
}

HardDiskM2(Adapter)

/**
 * All rights Reserved, Designed By monkey.blog.xpyvip.top
 *
 * @version V1.0
 * @Package com.xpyvip.designpattern.adapter
 * @Description: m2硬盘
 * @Author: xpy
 * @Date: Created in 2022年10月04日 7:50 下午
 */
public class HardDiskM2 {

    public String installInterfaceM2(){
        System.out.println("m2硬盘安装接口是m2");
        return "m2";
    }
}

InterfaceAdapter(Adapter)

/**
 * All rights Reserved, Designed By monkey.blog.xpyvip.top
 *
 * @version V1.0
 * @Package com.xpyvip.designpattern.adapter
 * @Description: 适配器
 * @Author: xpy
 * @Date: Created in 2022年10月04日 7:53 下午
 */
public class InterfaceAdapter implements InterfaceSata {

    private HardDiskM2 hardDiskM2;

    public InterfaceAdapter(HardDiskM2 hardDiskM2) {
        this.hardDiskM2 = hardDiskM2;
    }

    public String installInterfaceSata() {
        String m2 = hardDiskM2.installInterfaceM2();
        // 进行m2接口转换sata接口逻辑
        // ......

        return "sata";
    }
}

Client

/**
 * All rights Reserved, Designed By monkey.blog.xpyvip.top
 *
 * @version V1.0
 * @Package com.xpyvip.designpattern.adapter
 * @Description: 客户类
 * @Author: xpy
 * @Date: Created in 2022年10月04日 8:28 下午
 */
public class Client {
    public static void main(String[] args) {
        InterfaceSata interfaceSata = new InterfaceAdapter(new HardDiskM2());
        interfaceSata.installInterfaceSata();
    }
}

原文链接:https://monkey.blog.xpyvip.top/archives/java-she-ji-mo-shi—shi-pei-qi-mo-shi

Original: https://www.cnblogs.com/aibianchengya/p/16754454.html
Author: 程序猿的代码
Title: JAVA设计模式-适配器模式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/577814/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • mit 6.824 lab2 C,raft持久化(lab2D中有关于此处大量代码修改找出了很多错误)

    lab2 C 实现的就是持久化非常简单,在mit提供的框架中,持久化是存储在内存中。 首先看论文 需要持久化的元素。 根据lab2C的描述中我们可以知道需要实现的函数: persi…

    Linux 2023年6月7日
    087
  • 实验一 密码引擎-4-国䀄算法交叉测试

    任务详情 0 2人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名1 在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码…

    Linux 2023年6月8日
    088
  • WEB安全信息收集

    每次做测试都要去网上找信息太费劲这里放了常用的所有工具和网站,后期有更新在改。 子域名&敏感信息 通过大量的信息收集,对目标进行全方位了解,从薄弱点入手。 利用Google…

    Linux 2023年6月7日
    077
  • 数据库常用函数

    一、数学函数ABS(x) 返回x的绝对值BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制)CEILING(x) 返回大于x的最小整数值EXP(x) 返回值e(自然…

    Linux 2023年6月13日
    085
  • PyTorch 介绍 | 快速开始

    本节介绍有关机器学习常见任务重的API。请参阅每一节的链接以深入了解。 Working with data PyTorch有两个有关数据工作的原型: torch.utils.dat…

    Linux 2023年6月16日
    083
  • 数据结构 一元多项式加减法计算器

    cpp;gutter:true;</p> <h1>include</h1> <p>using namespace std;</…

    Linux 2023年6月13日
    072
  • git 那些事儿 —— 基于 Learn Git Branching

    推荐一个 git 图形化教学网站:Learn Git Branching,这个网站有一个沙盒可以直接在上面模拟 git 的各种操作,操作效果使用图形的方式展示,非常直观。本文可以看…

    Linux 2023年5月27日
    0119
  • [apue] linux 文件系统那些事儿

    前言 说到 linux 的文件系统,好多人第一印象是 ext2/ext3/ext4 等具体的文件系统,本文不涉及这些,因为研究具体的文件系统难免会陷入细节,甚至拉大段的源码做分析,…

    Linux 2023年5月27日
    097
  • Linux与Windows文件同步

    本次采用的同步方式是rsync,Rsync是一款免费且强大的同步软件,可以镜像保存整个目录树和文件系统,同时保持原来文件的权限、时间、软硬链接。第一次同步时会复制全部内容,下次只传…

    Linux 2023年6月8日
    0118
  • Redis具体解释

    2、 redis.windows.conf各项配置參数介绍 默认情况下,redis不是在后台模式执行的,假设须要在后台进程执行。把该项的值更改为yes。默觉得no daemoniz…

    Linux 2023年5月28日
    086
  • Python 练习题:用索引取出LIST中的值

    请用索引取出下面list的指定元素,分别为Apple,Python,Lisa -*- coding: utf-8 -*- 请用索引取出下面list的指定元素 L = [ [‘App…

    Linux 2023年6月8日
    089
  • Redis集群的节点通信原理

    Redis集群搭建中,数据如何在节点分布的原理,下面来介绍一下节点之间是如何进行通信(节点握手) 一、基础通讯原理 1、维护集群的元数据的两种方案介绍及对比 在分布式存储中需要提供…

    Linux 2023年5月28日
    0108
  • [云计算]腾讯云从业者认证-思维导图

    第一章 云计算基础介绍 第二章 腾讯云服务器产品介绍 第三章 腾讯云网络产品介绍 第四章 腾讯云CDN加速产品介绍 第五章 腾讯云存储产品介绍 第六章 腾讯云数据库产品介绍 第七章…

    Linux 2023年6月13日
    0101
  • 企业DevOps之路:jenkins 搭建

    安装 jdk8.0 下载jdk8.0 https://ftp-new-pc.pconline.com.cn/pub/download/201903/pconline15521980…

    Linux 2023年5月27日
    098
  • 数字数组

    3、【剑指Offer学习】【面试题03:找出数组中重复的数字】 4、【剑指Offer学习】【面试题04:二维数组中的查找】 11、【剑指Offer学习】【面试题11:旋转数组的最小…

    Linux 2023年6月13日
    0112
  • SSH加密原理

    1、SSH初次交换公钥 客户端发起链接请求 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥) 客户端生成密钥对 客户端用自己的公钥异或会话ID,计算出一个值Re…

    Linux 2023年6月7日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球