Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >设计模式-适配器模式示例

设计模式-适配器模式示例

原创
作者头像
堕落飞鸟
发布于 2023-05-03 07:36:14
发布于 2023-05-03 07:36:14
29600
代码可运行
举报
文章被收录于专栏:飞鸟的专栏飞鸟的专栏
运行总次数:0
代码可运行

下面是一个完整的适配器模式的Java代码示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 目标接口
public interface MediaPlayer {
   public void play(String audioType, String fileName);
}

// 被适配对象
public class Mp4Player {
   public void playMp4(String fileName) {
      System.out.println("Playing mp4 file. Name: "+ fileName); 
   }
}

// 被适配对象
public class VlcPlayer {
   public void playVlc(String fileName) {
      System.out.println("Playing vlc file. Name: "+ fileName); 
   }
}

// 适配器
public class MediaAdapter implements MediaPlayer {

   AdvancedMediaPlayer advancedMusicPlayer;

   public MediaAdapter(String audioType){
      if(audioType.equalsIgnoreCase("vlc") ){
         advancedMusicPlayer = new VlcPlayer();       
      }else if (audioType.equalsIgnoreCase("mp4")){
         advancedMusicPlayer = new Mp4Player();
      }  
   }

   @Override
   public void play(String audioType, String fileName) {
      if(audioType.equalsIgnoreCase("vlc")){
         advancedMusicPlayer.playVlc(fileName);
      }else if(audioType.equalsIgnoreCase("mp4")){
         advancedMusicPlayer.playMp4(fileName);
      }
   }
}

// 客户端
public class AudioPlayer implements MediaPlayer {
   MediaAdapter mediaAdapter; 

   @Override
   public void play(String audioType, String fileName) {        

      //播放 mp3 音乐文件的内置支持
      if(audioType.equalsIgnoreCase("mp3")){
         System.out.println("Playing mp3 file. Name: " + fileName);         
      } 
      //mediaAdapter 提供了播放其他文件格式的支持
      else if(audioType.equalsIgnoreCase("vlc") 
         || audioType.equalsIgnoreCase("mp4")){
         mediaAdapter = new MediaAdapter(audioType);
         mediaAdapter.play(audioType, fileName);
      }
      else{
         System.out.println("Invalid media. " + audioType + " format not supported");
      }
   }   
}

// 测试代码
public class AdapterPatternDemo {
   public static void main(String[] args) {
      AudioPlayer audioPlayer = new AudioPlayer();

      audioPlayer.play("mp3", "beyond the horizon.mp3");
      audioPlayer.play("mp4", "alone.mp4");
      audioPlayer.play("vlc", "far far away.vlc");
      audioPlayer.play("avi", "mind me.avi");
   }
}

输出结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Playing mp3 file. Name: beyond the horizon.mp3
Playing mp4 file. Name: alone.mp4
Playing vlc file. Name: far far away.vlc
Invalid media. avi format not supported

在这个示例中,适配器模式将一个不支持的音频格式转换成了支持的格式,并通过适配器的方式来实现播放。具体而言,AudioPlayer 类作为客户端调用 MediaPlayer 接口的 play 方法。如果需要播放的音频格式是不支持的,AudioPlayer 将会创建一个适配器对象,并通过该适配器对象来播放音频。

在适配器模式的示例中,有以下几个角色:

  • 目标接口:MediaPlayer 接口定义了 play 方法,用于播放音频文件。
  • 被适配对象:VlcPlayerMp4Player 类表示两种不兼容的音频格式,不能直接播放。
  • 适配器:MediaAdapter 类实现了 MediaPlayer 接口,同时包含一个被适配对象的引用。MediaAdapter 类将不支持的音频格式转换成支持的格式,并通过被适配对象来实现播放。
  • 客户端:AudioPlayer 类作为客户端,使用 MediaPlayer 接口来播放音频文件。如果需要播放的音频格式不支持,AudioPlayer 将会创建一个适配器对象,通过适配器来实现播放。

适配器模式的优点在于它可以将两个不兼容的接口进行连接,从而实现代码的复用和扩展性的提高。如果有新的音频格式需要支持,只需要实现一个新的适配器即可。

另外,适配器模式可以提高代码的可读性和可维护性。它可以将不相关的代码放在不同的类中,从而使代码更易于理解和维护。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
设计模式-适配器模式
适配器模式是一种结构型设计模式,它用于将一个类的接口转换成另一个接口,以便于两个不兼容的接口能够一起工作。适配器模式有时也被称为包装器模式。
堕落飞鸟
2023/05/03
3270
dart设计模式之适配器模式
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。 我们通过下面的实例来演示适配器模式的使用。其中,音频播放器设备只能播放 mp3 文件,通过使用一个更高级的音频播放器来播放 vlc 和 mp4 文件。
徐建国
2021/08/06
4590
23种设计模式,适配器模式实战
适配器模式(Adapter Pattern)是一种结构型设计模式,它的主要目标是让原本由于接口不匹配而不能一起工作的类可以一起工作。适配器模式主要有两种形式:类适配器和对象适配器。类适配器模式通过继承来实现适配,而对象适配器模式则通过组合来实现。
小马哥学JAVA
2024/04/06
1620
适配器模式1 动机2 模式定义3 模式结构4 时序图5 代码分析8 优点9 缺点10 适用环境11 模式应用12 模式扩展13 总结
1 动机 在软件开发中采用类似于电源适配器的设计和编码技巧 通常情况下,客户端可以通过目标类的接口访问它所提供的服务 有时,现有的类可以满足客户类的功能需要,但是它所提供的接口不一定是客户类所期望的,这可能是因为现有类中方法名与目标类中定义的方法名不一致等原因所导致的。 在这种情况下,现有的接口需要转化为客户类期望的接口,这样保证了对现有类的重用。 如果不进行这样的转化,客户类就不能利用现有类所提供的功能,适配器模式可以完成这样的转化。 在适配器模式中可以定义一个包装类,包装不兼容接口的对象,这个包装类
JavaEdge
2018/06/07
5070
结构型模式——适配器模式
概述:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
栗筝i
2022/12/01
6840
结构型模式——适配器模式
Java设计模式学习笔记—适配器模式
文章最后“Java设计模式笔记示例代码整合”为本系列代码整合,所有代码均为个人手打并运行测试,不定期更新。本节内容位于其Adapter包(package)中。
WindCoder
2018/09/20
9050
Java设计模式学习笔记—适配器模式
设计模式深度剖析:适配器模式在Go语言中的实践
设计模式是为我们解决一类特定问题的时间证明的解决方案。本文将详细介绍一种特别的设计模式——适配器模式(Adapter Pattern),并且通过一个Go语言的例子来演示其在实际问题中的应用。
运维开发王义杰
2023/08/10
2300
设计模式深度剖析:适配器模式在Go语言中的实践
07.适配器模式设计思想
适配器模式是一种结构型设计模式,用于将不兼容的接口转换为可兼容的接口,使原本不能一起工作的类可以协同工作。本文详细介绍了适配器模式的基础、实现方式(类适配器和对象适配器)、应用场景(如封装有缺陷的接口、统一多个类的接口、替换依赖的外部系统等)以及优缺点。通过具体案例(如读卡器适配、播放器适配)和实际开发中的应用(如数据库适配器、日志框架适配器),帮助读者深入理解和应用适配器模式。
杨充
2024/10/31
1560
图解设计模式:动动手玩转适配器模式
☀️☀️点开就是缘分认识一下,我是小冷。是一个兴趣驱动自学练习两年半的的Java工程师。 一位十分喜欢将知识分享出来的Java博主⭐️⭐️⭐️,擅长使用Java技术开发web项目和工具 文章内容丰富:覆盖大部分java必学技术栈,前端,计算机基础,容器等方面的文章 如果你也对Java感兴趣,关注小冷吧,一起探索Java技术的生态与进步,一起讨论Java技术的使用与学习 ✏️高质量技术专栏专栏链接: 微服务,数据结构,netty,单点登录,SSM ,SpringCloudAlibaba等 ⏩当前专栏:设计模式系列 ⏩专栏代码地址: 代码地址
冷环渊
2022/12/18
3710
图解设计模式:动动手玩转适配器模式
1分钟读懂适配器模式
是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
用户5224393
2019/08/13
5160
1分钟读懂适配器模式
一看就懂的适配器设计模式
一般客户端通过目标类的接口访问它所提供的服务。有时,现有类可以满足客户端类的需要,但所提供接口不一定是客户端所期望的,可能因为现有类中方法名与目标类中定义的方法名不一致。
JavaEdge
2022/05/29
4290
一看就懂的适配器设计模式
【Java设计模式系列】适配器模式及适用场景详解
一般客户端通过目标类的接口访问它所提供的服务。 有时,现有类可以满足客户端类的需要,但所提供接口不一定是客户端所期望的,可能因为现有类中方法名与目标类中定义的方法名不一致。
JavaEdge
2021/10/18
1.4K0
【面试题精讲】javaIO设计模式之适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以协同工作。
程序员朱永胜
2023/10/22
2230
设计模式(六)适配器模式
前面介绍的几种设计模式都是创建型模式,用于以不同的方式创建对象。下面我们来看看适配器模式,这是一种结构型模式,用于在两个无关的接口之间搭建桥梁。
乐百川
2022/05/05
2130
23设计模式之 ---------适配器模式
适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
默 语
2024/11/20
980
23设计模式之 ---------适配器模式
23种设计模式详解与示例代码(详解附DEMO)
本文将探讨设计模式在Java中的应用与实现。设计模式是一套被广泛接受的解决常见软件设计问题的经典方法。在Java编程中,设计模式是提高代码可读性、可维护性和可扩展性的关键。本文将详细介绍Java中常用的几种设计模式,包括工厂模式、单例模式、观察者模式和装饰器模式,并提供具体的代码示例和解释,帮助读者深入理解和学习这些模式的实现方式。
默 语
2024/11/20
9150
HandlerMethodReturnValueHandler与适配器模式使用
书接上文SpringBoot统一修改API返回值的两种方式中自定义HandlerMethodReturnValueHandler的内容,最后说道getDefaultReturnValueHandlers方法中添加了很多处理返回值的处理器,那这些处理器是如何生效的呢?
zhaozhen
2023/02/20
5000
设计模式 | 适配器模式及典型应用
适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。
小旋锋
2019/01/21
1.6K0
.NET简谈设计模式之(适配器模式)
今天我们要学习的是设计模式中的适配器模式,适配器模式其实也比较好理解,光从它的名字我们都能理解个所以然了。
王清培
2022/03/14
2500
.NET简谈设计模式之(适配器模式)
设计模式之适配器模式
在现实生活中,使用直流电的笔记本需要电源适配器才能安全接入交流电,不同语言之间的交流需要翻译官来做翻译,在程序中,我们也会遇到这种需要借助第三方进行适配的情景:当需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组件成本又很高,这时用适配器模式能很好地解决这些问题。
宿春磊Charles
2022/03/29
1970
推荐阅读
相关推荐
设计模式-适配器模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验