Java23种设计模式-结构型模式之适配器模式

适配器模式(Adapter Pattern):核心思想是将现有的接口转换客户端所期望的接口。它允许通过将一个接口转换为另一个接口,将不兼容的类或对象组合在一起。12

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

优点
1.客户端可以通过适配器透明地调用目标接口。
2.复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。
3.将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。
5.在很多业务场景中符合开闭原则
缺点
1.适配器编写过程需要结合业务场景全面考虑,可能会增加系统的复杂性。
2.可能增加代码阅读难度,降低代码可读性,过多使用适配器会使系统代码变得凌乱。

示例:创建一个MediaPlayer接口和一个实现了这个接口的AudioPlayer类,以及一个适配器类MediaAdapter,它将用于将不同格式的音频文件转换为MediaPlayer接口所需的格式

//目标接口
public interface MediaPlayer {void play(String audioType,String fileName);}
//适配器
public class MediaAdapter implements MediaPlayer{public MediaAdapter(String audioType) {System.out.println("MediaAdapter supports"+audioType+" adaption.");}@Overridepublic void play(String audioType, String fileName) {System.out.println("Playing " + audioType + " file. Name: " + fileName);}
}
//适配者
public class AudioPlayer implements MediaPlayer{@Overridepublic void play(String audioType, String fileName) {if (audioType.equalsIgnoreCase("mp3")){System.out.println("playing mp3 file. NameL:"+fileName);}else if (audioType.equalsIgnoreCase("mp4")){MediaPlayer mediaPlayer=new MediaAdapter(audioType);mediaPlayer.play(audioType,fileName);}else {System.out.println("Invalid media. " + audioType + " format not supported");}}
}
public class AdapterPatternDemo {public static void main(String[] args) {MediaPlayer mediaPlayer=new AudioPlayer();mediaPlayer.play("mp3", "beyond the horizon.mp3");mediaPlayer.play("mp4", "alone.mp4");mediaPlayer.play("mp3", "water like wine.mp3");}
}
/*** playing mp3 file. NameL:beyond the horizon.mp3* MediaAdapter supportsmp4 adaption.* Playing mp4 file. Name: alone.mp4* playing mp3 file. NameL:water like wine.mp3*/

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

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

相关文章

计算机网络物理层思维导图+大纲笔记

大纲笔记: 物理层的基本概念 解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是具体的传输媒体 主要任务 确定与传输媒体接口有关的一些特性 机械特性 电气特性 功能特性 规程特性信道上传送的信号 基带信号 来自信源的信号,直接表…

全彩屏负氧离子监测站的使用

TH-FZ5在繁忙的都市生活中,我们往往忽视了一个至关重要的问题——空气质量。随着工业化的进程加速,空气污染已成为影响人们健康的一大隐患。为了实时监测和了解身边的空气质量,全彩屏负氧离子监测站应运而生,成为了我们守护呼吸健…

elementUi——table表格中内容超过2行后,省略号...展示,鼠标悬停展示全部

elementUI、elementPlus的el-table都支持文字一行展示不全隐藏,悬停展示tooltip。但是UI设计会提出展示2行隐藏的的要求,我们便有这样的需求。项目中el-table往往会进行二次封装,所以下面的代码是在此基础上解决这个问题的。 1、首先是组件内…

Golang | Leetcode Golang题解之第50题Pow(x,n)

题目: 题解: func myPow(x float64, n int) float64 {if n > 0 {return quickMul(x, n)}return 1.0 / quickMul(x, -n) }func quickMul(x float64, n int) float64 {if n 0 {return 1}y : quickMul(x, n/2)if n%2 0 {return y * y}return y * y * …

Redis 安装及配置教程(Windows)【安装】

文章目录 一、简介一、 下载1. GitHub 下载2. 其它渠道 二、 安装1. ZIP2. MSI 软件 / 环境安装及配置目录 一、简介 Redis 官网地址:https://redis.io/   Redis 源码地址:https://github.com/redis/redis   Redis 官网安装地址(无Windo…

读天才与算法:人脑与AI的数学思维笔记09_分形

1. 分形 1.1. 1904年,瑞典数学家科赫(Helge von Koch)首次发表了雪花图案的结构——科赫曲线(又称雪花曲线),它被认为是一种数学怪胎,一种奇怪的人工构造 1.1.1. 但实际上并不是,自…

4- 24

day02 1.100个英语单词 2.vp div3 不过有点小悲惨,第一题正常的直接看出来答案。第二题其实是map模拟,一直没有读懂题目的意思,题目给的序列是打乱的。找出最小的,讲原来的序列补全,如果mp中没有这个数字,…

Android 系统充电动画

效果 Android获取电池充电状态是否为快充可参考. Android_source/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java private int lastBatteryStatus;private final BroadcastReceiver mBatteryChangedReceiver new BroadcastRece…

LeetCode 每日一题 ---- 【2739.总行驶距离】

LeetCode 每日一题 ---- 【2739.总行驶距离】 2739.总行驶距离解题方法:模拟 2739.总行驶距离 解题方法:模拟 根据题意进行模拟,主邮箱每减少 5 升油,汽车就可以行驶 10 公里,同时副油箱需要向主油箱注入 1 升油&…

如何正确卸载和重新安装 ESLint

在软件开发中,ESLint 是一款极具价值的代码质量和格式化工具,它帮助开发者保持代码的整洁和一致性。如果你需要从项目中卸载 ESLint 或重新安装它,这篇文章将为你提供详尽的指南。 卸载 ESLint 要从你的项目中完全移除 ESLint,你…

分组排序取第一条数据 SQL写法

1. 背景 在数据库查询过程中经常遇到需要分组排序查询第一条数据的情况。例如,在消息列表中需要展示每个联系人最近的一条信息。 2. 解决方案 目前我接触到的解决方案有两种,分别是开窗函数 row_number 和变量法。 2.1 开窗函数法 比较常用的解决方…

杰发科技AC7840——CAN通信简介(6)_监听模式

参考:http://t.csdnimg.cn/AFFPC 0. 简介 7840支持4种扩展模式,其中监听模式。 监听模式概念 作用: 这里写的用于诊断,实际上我还没有用到,不太理解为啥可以用作诊断。 我的理解是,在多个总线下,使用监听…

BUUCTF-MISC-10.LSB1

10.LSB1 题目:lsb隐写,stegsolve可以看到包含了一个PNG图片 使用stegsolve打开这个图片 由PNG文件头可以看出隐写内容为PNG文件,按save Bin键保存为PNG文件。 得到一张二维码图片,使用CQR扫一下

重启Nginx

1. 重启nginx命令: systemctl restart nginx service nginx restart ./nginx -s reload 2. 重启完查看进程: ps -ef | grep nginx

PostgreSQL中的临时表与永久表的区别,以及它们的最佳使用场景?

文章目录 临时表与永久表的区别临时表永久表区别总结 最佳使用场景临时表的使用场景永久表的使用场景 解决方案及示例代码临时表示例创建临时表插入数据查询数据 永久表示例创建永久表插入数据查询数据 总结 在PostgreSQL中,临时表和永久表都是用于存储数据的表结构…

Tensorflow小技巧01:检测本地Tensorflow的版本

前言: 以Pycharm为例,Windwos10系统,检测本地环境的Tensorflow的版本: 1 打开Pycharm窗口 2 在窗口中输入: pythonPython 3.9.5 (tags/v3.9.5:0a7dcbd, May 3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] on win…

智慧文旅:引领旅游产业智慧升级的创新模式

一、智慧文旅是什么? 智慧文旅是指以当地特色文化为核心,借助现代科技手段,实现旅游景区全面智慧升级的旅游模式。在智慧文旅中,新一代信息网络技术和装备得到充分运用,文化旅游基础设施得到新建和改善,特…

python安装包使用国内镜像源

文章目录 1、国内镜像源2、命令3、pip加速安装4、其他命令参考文献 提示:以下是本篇文章正文内容,下面案例可供参考 1、国内镜像源 清华大学 :https://pypi.tuna.tsinghua.edu.cn/simple/ 阿里云:http://mirrors.aliyun.com/pyp…

【唯美情侣爱情表白纪念HTML单页】

唯美情侣爱情表白纪念HTML单页 效果图部分代码领取代码下期更新预报 效果图 整图 背景图 部分代码 index.html <!DOCTYPE html> <html lang"en"><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"…

Java 基础:设计模式之工厂方法模式

工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一个创建对象的通用接口&#xff0c;但将实际创建逻辑推迟到子类中实现。这种模式允许客户端使用抽象接口来创建特定类型的对象&#xff0c;而无需了解具体的实现细节。以…