设计模式-结构型模式-适配器模式

news2024/9/24 11:26:56

1.适配器模式定义

        将类的接口转化为客户期望的另一个接口,适配器可以让不兼容的两个类一起协同工作;

1.1 适配器模式的优缺点

优点

  • 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无需修改原有结构;
  • 增加了类的透明性和复用性,将具体业务实现过程封装在适配者类中,对于客户端而言是透明的,而且提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用;
  • 灵活性和扩展性都很好,通过使用配置文件可以很方便的更换适配器,也可以在不修改原有代码的基础上增加增加适配器类,符合开闭原则;

缺点

1. 类适配器的缺点
  • 对于Java不支持多重继承的语言来说一次最多只能适配一个适配者类,不能同时适配多个适配者类;
  • 适配者类不能为最终类
2.对象适配器的缺点
  • 与类适配器模式相比,在该模式下要在适配器中置换适配器类的某些方法比较麻烦;

1.2 适配器模式适用的场景

  •  统一多个类的接口
  • 需要依赖外部系统时,当把项目依赖的一个外部系统替换为另一个外部系统时,利用适配器模式可以减少对代码的改动;
  • 原有接口无法修改或者原有接口功能太老旧但又要兼容;
  • 适配不同数据格式时;

2.适配器模式的原理

  • 目标接口(Target):当前系统业务所期待的接口,它可以是抽象类或接口;
  • 适配者类(Adaptee):适配者即被适配的角色,他是被访问和适配的现存组件库中的组件接口;
  • 适配器类(Adapter):是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按照目标接口的格式访问适配者;

3.适配器模式的实现

        适配器模式有两种实现方式:类适配器(用继承关系来实现)、对象适配器(用组合关系来实现);类适配器模式的耦合度比后者高,且要求了解现有组件库中的相关组件的内部结构,所以应用少;

【实例】

        假设有一天电脑只能读取SD卡的信息,如果想要使用电脑读取TF卡的内容,就需要将TF卡加上卡套转成SD卡;

3.1 类适配器模式

         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);
}

        TF卡实现类

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 Client {

    public static void main(String[] args) {

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

        SDAdapterTF adapterTF = new SDAdapterTF();
        System.out.println(computer.read(adapterTF));
    }
}

3.2 对象适配器模式

        对象适配器可采用将现有组件库中已经实现的组件引入适配器类中,该类同时实现当前系统的业务接口;

        适配器类

public class SDAdapterTF implements SDCard{

    private TFCard tfCard;

    public SDAdapterTF(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));

        TFCard tfCard = new TFCardImpl();
        SDAdapterTF adapterTF = new SDAdapterTF(tfCard);
        System.out.println(computer.read(adapterTF));
    }
}

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

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

相关文章

有效提高媒体曝光率,智能推荐为什么是“最大的计算系统之一”?

导语:我认为很少有人意识到,推荐系统是世界上构想过的最大的计算系统之一。——Jensen Huang  在信息过载的时代背景下,智能推荐系统已广泛应用于电子商务、社交媒体、新闻资讯、视频音乐、旅游出行等领域,为用户提…

央行沟通与市场影响以日本央行与黄金市场为例

日本央行加息与市场反应 在近期,日本央行采取了出人意料的行动,将短期利率从0-0.1%上调至0.25%,这是自3月结束长达8年负利率政策以来的第二次加息。这一举动迅速引发了全球市场的关注,尤其是那些依赖低利率环境进行套利交易的市场…

每天学习一个基础算法之选择排序

目录 前言: 一、选择排序的基本思路和实现方法 1、基本思路 2、实现方法 二、选择排序的执行过程示意图 三、选择排序的实现代码 选择排序代码主体(以接口函数的形式) 测试部分(主函数调用) 四、对选择排序复杂度的分析…

系统架构师软考重难点划分及学习要点

目录 引言 综合知识 案例分析 案例分析题型及选择策略 历年案例分析题型及分值分布 学习与应试策略 论文 考试规则 写作要求与技巧 忌讳与注意事项 常见题目与考查方向 引言 系统架构师软考是许多IT从业人员进阶的必经之路。面对这门考试,如何有效划分重难…

社区维修平台

TOC springboot0751社区维修平台 第一章 绪 论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作,对于社区维修平台所牵扯的管理及数据保存都是非常多的,例如住户管理、社区公告管理、维修工管理、维修订单管理、接单信息管理、订单信息管…

Windows系统安装MySQL

下载MySQL 打开网址MySQL :: Download MySQL Community Server点击图下所示位置Download 进入图下所示界面,点击图下所示位置不登录下载 已下载完成 安装MySQL 将下载好的压缩包解压到一个专门的位置,该软件为绿色版软件,解压即可使用 配置…

SSM课程资源库APP—计算机毕业设计源码23834

目 录 摘要 1 绪论 1.1开发的意义 1.2研究现状 1.3ssm框架介绍 1.3论文结构与章节安排 2 课程资源库APP系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5…

如何把多行SQL或多行内容转为一行内容

安装notepad 链接:https://pan.quark.cn/s/b01284447533 提取码:5BEc 行合并 1.选中内容 2. 编辑 --- 行操作 --- 合并行 3.效果

dbeaver数据库工具配置连接openGauss5.X

目录 欢迎阅读dbeaver数据库工具配置连接openGauss5.X教程一、准备工作1、下载openGauss JDBC驱动:2、确保openGauss数据库已运行: 二、在DBeaver中配置驱动1、打开DBeaver:2、进入驱动管理器:3新建驱动:4、添加JDBC驱…

周报(8.12-8.18)

周报(8.12-8.18) 本周工作 DD-Net学习与代码复现 DD-Net网络结构如上图所示。DD-Net也有一个为处理OpenFWI数据的版本:DD-Net70: 与传统DL-FWI不同的是,DD-Net同时拥有两个解码器,第一个解码器的目标是传统的速度模型&#xff0…

科普|企业防泄密措施有哪些?(8种方法详细说明)

企业在日常运营中面临着各种信息泄露的风险,这些风险可能来自内部员工的不当操作或外部黑客的恶意攻击。为了保护企业的核心竞争力和商业机密,采取有效的防泄密措施至关重要。以下是八种常见的企业防泄密措施及其详细说明: 1. 数据分类与加密…

React多功能管理平台项目开发全教程

​🌈个人主页:前端青山 🔥系列专栏:React篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来React篇专栏内容:React-综合应用开发教程:构建多功能管理平台 目录 1.创建项目 2.改造目录结构 3.安装一些必须的模块 3.1 配置预处理器 3.1.1 配置别名@ 3…

第八节:Nodify 编辑器属性

引言 经过前几章的学习,你已经对Nodify框架有了初步的编程思路。当然只局限于这些还完全不够,本章节将阐述各个结构组件的一些常用属性,以便在日后的开发过程中更得心应手。 1、编辑器 平移 简介属性默认值平移功能 控制DisablePanningfals…

了解Swagger规范检查点

目录 检查 Api注解 第一项:是否包含接口的文字描述、接口的类名 检查 ApiOperation注解 第一项:是否包含HTTP请求方法(Get、Post等) 第二项:是否有对方法的简单描述 第三项:是否有对方法的详细描述 检查 ApiResponses注解 …

分享一个基于Python的抖音女装数据分析系统flask毕设女装数据采集系统(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

[数据集][目标检测]电力场景输电线均压环歪斜检测数据集VOC+YOLO格式303张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):303 标注数量(xml文件个数):303 标注数量(txt文件个数):303 标注类别…

Apache SeaTunnel技术架构演进及其在AI领域的应用

随着数据集成需求的增长,Apache SeaTunnel作为新一代的数据同步引擎,不仅在技术架构上不断演进,也在AI领域展现出其独特的应用价值。在CommunityOverCode Asia 2024大会上,Apache SeaTunnel PMC Chair 高俊 深入探讨SeaTunnel的技…

C++核心编程02——引用

摘录于B站黑马程序员提供的笔记。 1. 引用的基本使用 作用&#xff1a; 给变量起别名 语法&#xff1a; 数据类型 &别名 原名 实例&#xff1a; #include <iostream> using namespace std;int main() {// 引用基本语法// 数据类型 &别名 原名int a 10;in…

开放式耳机怎么戴?五大市场热卖爆款推荐!

开放式耳机的佩戴方法通常比较直观&#xff0c;但具体步骤可能因不同品牌和型号的设计而异。以下是一般的佩戴步骤&#xff1a; 1. 调整耳机&#xff1a;大多数开放式耳机都有可调节的耳挂&#xff0c;首先调整耳挂&#xff0c;确保它能够舒适地适应你的耳朵形状。 2. 定位耳…

FGF20:多些研究关注

成纤维细胞生长因子20&#xff08;FGF20&#xff09;是FGF9亚家族成员&#xff0c;作为调节中枢神经发育和功能的神经营养因子。 &#xff08;数据来源AlphaFold&#xff09; FGF20由208个氨基酸组成&#xff0c;属于分泌型胞外蛋白&#xff0c;无信号肽区段&#xff0c;功能域…