意图:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的
举例:
有一个 MediaPlayer 接口和一个实现了 MediaPlayer 接口的实体类 AudioPlayer。默认情况下,AudioPlayer 可以播放 mp3 格式的音频文件。
还有另一个接口 AdvancedMediaPlayer 和实现了 AdvancedMediaPlayer 接口的实体类。该类可以播放 vlc 和 mp4 格式的文件。
想让 AudioPlayer 播放其他格式的音频文件。为了实现这个功能,我们需要创建一个实现了 MediaPlayer 接口的适配器类 MediaAdapter,并使用 AdvancedMediaPlayer 对象来播放所需的格式。
AudioPlayer 使用适配器类 MediaAdapter 传递所需的音频类型,不需要知道能播放所需格式音频的实际类。AdapterPatternDemo,我们的演示类使用 AudioPlayer 类来播放各种格式。


折线框的是原有对象,弯曲线框中的是新增对象or关系。
可见:
1,audioplayer主要修改:内部增加持有对象,mediaAdapter,部分方法调用mediaAdapter实现逻辑
2,mediaAduapter修改,实现接口meidaplayer,其中具体实现方法通过调用adavanceMediaPlayer的方法实现

参考代码:

public class AudioPlayer implements MediaPlayer {MediaAdapter mediaAdapter; @Overridepublic 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 MediaAdapter implements MediaPlayer {AdvancedMediaPlayer advancedMusicPlayer;public MediaAdapter(String audioType){if(audioType.equalsIgnoreCase("vlc") ){advancedMusicPlayer = new VlcPlayer();          } else if (audioType.equalsIgnoreCase("mp4")){advancedMusicPlayer = new Mp4Player();}  }@Overridepublic void play(String audioType, String fileName) {if(audioType.equalsIgnoreCase("vlc")){advancedMusicPlayer.playVlc(fileName);}else if(audioType.equalsIgnoreCase("mp4")){advancedMusicPlayer.playMp4(fileName);}}
}

设计模式08_适配器相关推荐

  1. Java设计模式之——适配器

    适配器:基于现有类所提供的服务,向客户提供接口,以满足客户的期望 适配器是英语Adapter/adaptor的汉语翻译.适配器就是一个接口转换器. <Java设计模式> 类适配器  客户的 ...

  2. JAVA设计模式什么鬼(适配器)——作者:凸凹里歐

    我们这个世界,充满着千奇百怪的对象,更有趣的是对象与对象间是存在着互动,沟通,这样世界才变得美妙.那到底是怎样互动呢?靠什么才能互动呢?是的,接口.比如你和朋友一起喝茶聊天,我们暂且不管声带,耳膜这些 ...

  3. java设计模式之适配器设计模式

    什么是适配器模式?为什么要使用适配器模式? 适配器模式:属于结构型设计模式,适配俩个字来说很明显需要做兼容,俩者毫无关系,从而联系到一起去使用,拓展. 举个例子:我现在需要三根充电器线,我有安卓,苹果 ...

  4. 【设计模式】模板设计模式与适配器设计模式

    1.模板设计模式 赵本山问宋丹丹: "如何把大象放进冰箱?"宋丹丹回答:"第一步:打开冰箱门,第二步:把大象塞进 冰箱,第三步:关闭冰箱门".赵本山再问:&qu ...

  5. Java读源代码学设计模式:适配器Adapter

    适配器模式相关源代码:slf4j-1.6.1.hibernate-3.6.7 大家都知道.log4j是一个广泛使用的日志工具,除此之外.sun公司在JDK中也有自己的日志工具,也就是java.util ...

  6. 如何定义适配器adapter类_设计模式22-Adapter(适配器)模式-组件接口适配

    在软件开发过程中,有时候系统的数据和行为都正确,但接口不符合,这时候我们就应该考虑使用适配器模式,适配器的作用即将一个类的接口转换成客户希望的另外一个接口.它使得原本由于接口不兼容而不能一起工作的那些 ...

  7. 结构型设计模式(适配器、桥接、组合、装饰、外观、享元、代理)

    适配器模式 将一个接口转换成另一个接口,使接口不兼容的类可一起工作. 类适配器模式 public class Phone {//充电的方法,需传入5v的电压.public void charging( ...

  8. 设计模式----Adapter(适配器)

    作用: 将一个类的接口转换成客户希望的另外一个接口.Adapt 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. UML示意图 1)采用继承原有接口类的方式 2)采用组合原有接口类的方式 ...

  9. java设计模式适配器模式_Java中的适配器设计模式

    java设计模式适配器模式 适配器设计模式是一种结构设计模式 ,可以帮助我们连接到通过不同接口公开相似功能的旧版或第三方代码. 适配器的现实世界是我们用来将USB电缆连接到以太网端口的类比. 在设计一 ...

最新文章

  1. 集合覆盖 顶点覆盖: set cover和vertex cover
  2. linux学习笔记 第七篇 (samba(一))(iscsi)
  3. [Android官方API阅读]___Application Fundamentals
  4. 对接多种三方的设计模式_死磕设计模式之适配器模式
  5. ExcelJS —— Node 的 Excel 读写扩展模块2
  6. VS2015+qt5.11入门(实现计算机的加法和登录操作)
  7. VMware15设置快照回到指定时间的状态
  8. 10多家在线旅游企业呼吁海外商家向中国游客提供优惠退改措施
  9. 2021亳州高考成绩查询,2021年亳州高考状元名单公布,亳州文理科状元是谁多少分...
  10. 手机上怎么安装Java的软件游戏
  11. html字体图标显示不出来,h5页面字体图标显示不正常
  12. Flutter 微信语音消息播放动画
  13. H5本地调试微信静默授权、授权获取用户信息
  14. 工具篇——MoneyFormatUtil(用于将人民币小写金额转换成大写金额)
  15. Win10 出现恢复,无法加载操作系统,关键系统驱动程序丢失或错误 蓝屏错误代码0xc000007b
  16. [笔记] APIO 2018 Day1
  17. OSINT 常用信息收集策略
  18. 生活杂谈之万网域名注册过程详解
  19. php7 三元运算 精简
  20. 迷宫寻宝(宽度搜索)(C++)

热门文章

  1. QModelIndex——
  2. 题解 牛客【「水」悠悠碧波】
  3. ubuntu 15.04安装VMware11
  4. c语言程序设计小学生测验,c语言程序设计(1) 小学生计算机辅助教学系统
  5. sql 备份 文件大小_预测SQL备份大小
  6. ssis zip压缩文件_在SSIS中处理参差不齐的正确格式的文件
  7. [网络流24题]孤岛营救问题
  8. 2018-7-10杂记
  9. 362. Design Hit Counter
  10. 理解Docker(1):Docker 安装和基础用法