13、【适配器模式】让不兼容的类能够一起工作

你好,我是程序员雪球。

今天我们来聊聊 23 种设计模式中,一种常见的结构型模式,适配器模式。聊聊它的设计思想、实现原理,应用场景,以及如何使用。

 50dce405959041188d17b32e9e57a654.png

 

一、设计思想

 

在软件设计中,有时我们会遇到这样的问题:我们需要使用一些现有的类或接口,但是这些类或接口的接口与我们的需求不匹配。这时,我们可以使用适配器模式来解决这个问题。适配器模式的设计思想是将一个类的接口转换成另一个接口,使得原本不兼容的类能够一起工作。

 

二、实现原理

 

适配器模式的实现原理是创建一个适配器类,该类继承或实现需要适配的类或接口,并在适配器类中实现需要的功能。适配器类通过调用适配的类或接口的方法来实现自己的功能。

 

三、应用场景

 

1. 旧系统升级:在旧系统升级时,可能需要使用新的接口或类,但旧系统中的某些代码仍然需要使用旧的接口或类。这时,可以使用适配器模式来将旧的接口或类适配到新的接口或类上,从而实现系统的平滑升级。

2. 第三方库集成:在开发过程中,可能需要使用第三方库,但第三方库的接口与我们的需求不匹配。这时,可以使用适配器模式来将第三方库的接口适配到我们的接口上,从而实现第三方库的集成。

3. 不同平台之间的通信:在不同平台之间进行通信时,可能需要使用不同的接口或协议。这时,可以使用适配器模式来将不同平台的接口或协议适配到同一个接口上,从而实现不同平台之间的通信。

 

四、示例代码

 

下面是一个使用 Java 实现的适配器模式的示例代码:

 

java 复制

public class AdapterPatternExample {

    public static void main(String[] args) {

        // 创建适配的对象

        Adaptable adaptable = new Adaptable();

        // 创建适配器对象

        Adapter adapter = new Adapter();

        // 调用适配的方法

        adaptable.operation();

        // 调用适配器的方法

        adapter.operation();

    }

}

 

// 适配的接口

interface Adaptable {

    void operation();

}

 

// 适配的类

class AdaptableImpl implements Adaptable {

    @Override

    public void operation() {

        System.out.println("Adaptable operation()");

    }

}

 

// 适配器接口

interface Adapter {

    void operation();

}

 

// 适配器类

class Adapter extends AdaptableImpl implements Adapter {

    @Override

    public void operation() {

        System.out.println("Adapter operation()");

        super.operation();

    }

}

 

 

在上述示例中,我们创建了一个适配的接口 Adaptable 和一个适配的类 AdaptableImpl ,以及一个适配器接口 Adapter 和一个适配器类 Adapter 。在 Adapter 类中,我们继承了 AdaptableImpl 类,并实现了 Adapter 接口。在 operation 方法中,我们首先调用了 Adapter 类的 operation 方法,然后调用了 AdaptableImpl 类的 operation 方法。

 

五、总结

0b35e8ee3aba4415b4f0d118f91ec4f1.png

 

一、设计思想

将一个类的接口转换成另一个接口,使得原本不兼容的类能够一起工作。

二、实现原理

创建一个适配器类,该类继承或实现需要适配的类或接口,并在适配器类中实现需要的功能。

三、应用场景

1. 旧系统升级;

2. 第三方库集成;

3. 不同平台间的通信;

 

讨论环节

 

为了方便你理解和巩固今天的内容,我给你留下两个讨论题,请在评论区与我一起讨论吧。

 

1. 适配器模式的核心设计思想是什么?

2. 请说说你用过适配器模式的场景?

 

如果觉得有收获,请双击支持,关注,后期我会持续更新更多相关知识。

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

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

相关文章

AI+文旅|当智慧遇见风景,感受文旅新体验

今年的五一假期,公众出游热度持续升温,全国多地景区再现“人山人海”,在这样的背景下,促使文旅行业不断通过数字化手段,提升旅游体验质量、探索新的服务方式,AI技术的加入为旅游业带来了革命性的变化。智能导游、智能推…

10.Java对象内置结构

文章目录 Java对象内置结构1.Java对象的三个部分1.1.对象头1.2.对象体1.3.对齐字节 2.对象结构中核心字段的作用2.1.MarkWord(标记字)2.2.Class Pointer(类对象指针)2.3.Array Length(数组长度)2.4.对象体2.5.对齐字节 3.Mark Word的结构信息3.1.不同锁状态下的Mark Word字段结…

杨校老师课堂之基于SpringBoot + Vue3 的充电桩管理平台设计

获取代码: 有偿获取:mryang511688 技术栈 后端 SpringBoot MySQL MyBatis Redis 前端 Vue3.0 ElementUI-Plus Vite 3.开发环境 JDK1.8、Maven3.5.4、MySQL5.7、Redis5.0.5、IntelliJ IDEA2018、 Node14.16.1 4.内置功能 前后端分离的项目&a…

Spring AI项目Open AI绘画开发指导

Spring AI项目创建 Spring AI简介创建Spring AI项目配置项目pom和application文件controller接口开发运行测试 Spring AI简介 Spring AI 是 AI 工程的应用框架。其目标是将 Spring 生态系统设计原则(如可移植性和模块化设计)应用于 AI,并推广…

【CSP CCF记录】202206-1 归一化处理:fixed和setprecision的使用

题目 代码 注意输出精度&#xff0c;小数保留16位 使用fixed和setprecision控制输出格式 参考文章 #include<bits/stdc.h> using namespace std; const int N1010; int n; double a[N]; double average,D,f[N]; int main() {cin>>n;//计算平均值 double sum0;f…

《编译原理》阅读笔记:p4-p17

《编译原理》学习第 2 天&#xff0c;p4-p17总结&#xff0c;总计 14 页。 一、技术总结 1.structure of compiler 编译器组成包括&#xff1a;Lexical Analyzer -> Syntax Analazer -> Semantic tree -> Intermediate Code Generator -> Machine-Independent C…

IT行业现状与未来趋势-技术创新日新月异

目录 一、引言 二、IT行业现状 技术创新日新月异 市场需求持续增长 人才竞争激烈 网络安全问题凸显 三、IT行业未来趋势 人工智能将更加普及 区块链技术将改变商业模式 网络安全将成为重要战略 数字化转型将加速推进 四、结语 一、引言 随着科技的飞速发展&#x…

【静态分析】软件分析课程实验A2-常量传播和Worklist求解器

Tai-e官网&#xff1a; 概述 | Tai-e 参考&#xff1a; https://www.cnblogs.com/gonghr/p/17979609 -------------------------------------------------------- 1 作业导览 为 Java 实现常量传播算法。实现一个通用的 worklist 求解器&#xff0c;并用它来解决一些数据…

【CSP CCF记录】202209-1 如此编码

题目 过程 C中"/"的使用 当a和被b均为int, long, char这样的整数类型&#xff0c;此时除法运算的结果为所得商的整数部分&#xff0c;例如&#xff1a;180/100&#xff0c;结果为1&#xff1b; int a 180;int b a / 100;cout << b << endl;#结果为1当…

【HCIP学习】BGP对等体组、聚合、路由反射器、联盟、团体属性

一、大规模BGP网络所遇到的问题 BGP对等体众多&#xff0c;配置繁琐&#xff0c;维护管理难度大 BGP路由表庞大&#xff0c;对设备性能提出挑战 IBGP全连接&#xff0c;应用和管理BGP难度增加&#xff0c;邻居数量过多 路由变化频繁&#xff0c;导致路由更新频繁 二、解决大…

机器人学导论实验3-机器人定位中的直线拟合与提取

目录 1 实验目的 2 任务一&#xff1a;直线拟合 2.1 内容分析 2.2 过程分析 2.3 结果分析 3 任务二&#xff1a;直线提取 3.1 内容分析 3.2 过程分析 3.3 结果分析 4 遇到的问题和心得 机器人导论实验-机器人定位中的直线拟合与提取 1 实验目的 2 任务一&#xff1a; 直线…

基于PHP开发的图片高清无损在线压缩源码系统 带完整源代码以及搭建教程

系统概述 高清无损在线压缩源码系统基于PHP语言开发&#xff0c;结合GD库和ImageMagick等图像处理工具&#xff0c;实现了对JPEG、PNG、GIF等多种图片格式的高清无损压缩。系统采用B/S架构&#xff0c;用户只需通过浏览器访问系统界面&#xff0c;即可实现图片的上传、压缩、预…

C语言实现简单的日历功能

开篇 本篇文章的题目来源于《编程珠玑》第三章课后习题的第四个问题&#xff0c;也是我会手动实现的本章的最后一个功能。 问题概要 给定月和年&#xff0c;使用字符数组生成该月的日历&#xff08;含有周几的日历&#xff09;。 思路分析 为了生成给定年份中某个月的日历&…

Axure PR 10 制作顶部下拉三级菜单和侧边三级菜单教程和源码

在线预览地址&#xff1a;Untitled Document 2.侧边三级下拉菜单 在线预览地址&#xff1a;Untitled Document 文件包和教程下载地址&#xff1a;https://pan.quark.cn/s/77e55945bfa4 程序员必备资源网站&#xff1a;天梦星服务平台 (tmxkj.top)

java日期格式化

概括 在Java中&#xff0c;对于日期格式转换&#xff0c;最常用的方法通常是使用java.time包中的DateTimeFormatter类&#xff08;适用于Java 8及以上版本&#xff09;&#xff0c;或者java.text.SimpleDateFormat类&#xff08;适用于旧版Java&#xff09;。然而&#xff0c;…

Java二叉树征服手册:从新手村到数据结构王者

前情提要&#xff1a;Java二叉树秘技&#xff1a;从零构建至优化大师&#xff0c;玩转算法王国 文章目录 七. 代码示例与分析1. 插入操作的代码示例2. 前序遍历的代码示例3. 删除操作的代码示例 八. 性能优化与注意事项内存管理优化内存使用内存分配 时间复杂度分析常见问题与避…

轮播变化背景图也一样替换不同的背景色

<template><!-- 全局轮播子组件 --><view class"banner-box"><!-- 背景色 --><view class"banner-bg" :style"{background-image: url(${bannerBackgroundImage}), linear-gradient(${bannerBackground || #345DC2} 50%,#…

拥抱智能物联新场景,畅享4G智能插座的领先优势!

在智能化浪潮席卷全球的今天&#xff0c;智能插座作为智能家居、智能办公、智能工业、智能校园、智能实验室等领域的核心设备&#xff0c;正逐渐受到人们的关注和青睐。近期&#xff0c;一款全新的4G智能插座正式上市&#xff0c;凭借其独特的优势和创新功能&#xff0c;已经迅…

手机恢复出厂设置后怎么还原数据?2个实用技巧推荐!

随着科技的进步&#xff0c;智能手机已成为我们日常生活中不可或缺的一部分。然而&#xff0c;有时候我们可能会因为各种原因选择恢复手机的出厂设置&#xff0c;这会导致我们的一些重要数据丢失。手机恢复出厂设置后怎么还原数据呢&#xff1f;本文将为您介绍2个实用技巧&…

Windows/Mailing

Mailing Enumeration nmap 使用 nmap 扫描系统&#xff0c;发现对外开放了如下端口 ┌──(kali㉿kali)-[~/vegetable/HTB] └─$ nmap -sC -sV -oA nmap 10.10.11.14 Starting Nmap 7.93 ( https://nmap.org ) at 2024-05-08 01:46 EDT Nmap scan report for 10.10.11.14 H…