Java设计 的 Java适配器

适配器模式作为两个不兼容接口之间的桥梁。 这种类型的设计模式属于结构模式,因为该模式组合了两个独立接口。

这种模式涉及一个单独的类,它负责连接独立或不兼容接口的功能。 现实生活的例子- 读卡器的,其用作为存储卡和笔记本电脑之间的适配器。将存储卡插入读卡器并将读卡器插入笔记本电脑接口,以便可以通过笔记本电脑读取存储卡。

我们通过以下示例演示适配器模式的使用。音频播放器设备只能播放mp3文件,但希望能够实现一个可播放vlc和mp4文件的高级音频播放器。

实现实例

有一个MediaPlayer接口和一个具体的类-AudioPlayer它实现了MediaPlayer接口。 默认情况下,音频播放器(AudioPlayer )可以播放mp3格式的音频文件。

还有另一个接口AdvancedMediaPlayer 和实现AdvancedMediaPlayer 接口的具体类。 这些类可以播放vlc和mp4格式的文件。

想让AudioPlayer播放其他格式。要实现这一点,需要创建了一个适配器类MediaAdapter,它实现了MediaPlayer接口并使用AdvancedMediaPlayer对象来播放所需的格式。

AudioPlayer使用适配器类MediaAdapter传递它所需的音频类型,而不知道可以播放所需格式的实际类。 AdapterPatternDemo这是一个演示类,它将使用AudioPlayer类来播放各种格式。

实现结构如下图所示 -

第1步

分别创建媒体播放器和高级媒体播放器接口。代码如下所示 -

MediaPlayer.java

public interface MediaPlayer {

public void play(String audioType, String fileName);

}

AdvancedMediaPlayer.java

public interface AdvancedMediaPlayer {

public void playVlc(String fileName);

public void playMp4(String fileName);

}

第2步

创建实现AdvancedMediaPlayer接口的具体类。

VlcPlayer.java

public class VlcPlayer implements AdvancedMediaPlayer{

@Override

public void playVlc(String fileName) {

System.out.println("Playing vlc file. Name: "+ fileName);

}

@Override

public void playMp4(String fileName) {

//do nothing

}

}

Mp4Player.java

public class Mp4Player implements AdvancedMediaPlayer{

@Override

public void playVlc(String fileName) {

//do nothing

}

@Override

public void playMp4(String fileName) {

System.out.println("Playing mp4 file. Name: "+ fileName);

}

}

第3步

创建实现MediaPlayer接口的适配器类。

MediaAdapter.java

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

}

}

}

第4步

创建一个实现MediaPlayer接口的具体类。

AudioPlayer.java

public class AudioPlayer implements MediaPlayer {

MediaAdapter mediaAdapter;

@Override

public void play(String audioType, String fileName) {

//inbuilt support to play mp3 music files

if(audioType.equalsIgnoreCase("mp3")){

System.out.println("Playing mp3 file. Name: " + fileName);

}

//mediaAdapter is providing support to play other file formats

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

}

}

}

第5步

使用AudioPlayer播放不同类型的音频格式。

AdapterPatternDemo.java

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

}

}

第6步

验证输出结果,执行上面的代码得到以下结果 -

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

java方便适配器_Java适配器相关推荐

  1. java 适配器_java适配器

    java适配器(Adapter) 1. 概念 适配器模式把一个类的接口转换成客户端期待的另外一种接口, 从而是原本应用接口不匹配而无法在一起工作的两个类能够在一起工作. 举个例子来说,现在一般的家用电 ...

  2. java 适配器_java里面的适配器是什么东西

    展开全部 适配器,我们知道充电器有适配器.可以把220V的电压,32313133353236313431303231363533e58685e5aeb931333335316561转换成110V的电压 ...

  3. java事件适配器_java 事件适配器

    java 事件适配器. 事件适配器,为一些Listener接口提供了适配器(Adapter)类 通过继承事件所对应的Adapter类,只需重写需要的方法 提供了一种简单的实现监听器的手段,可以缩短程序 ...

  4. java设计模式adapter_Java设计模式--适配器(Adapter)模式

    适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的用途 用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极.阴极 ...

  5. Java 设计模式 Adapter 对象适配器 模式

    Java 设计模式 Adapter 对象适配器 模式 Adapter模式用于现有的程序无法直接使用,需要做适当的变换之后才能使用的情况. 涉及到的角色 Target对象:定义所需的方法. Client ...

  6. 【设计模式】适配器模式 ( 概念 | 适用场景 | 优缺点 | 外观模式对比 | 适配器模式相关角色 | 类适配器 | 对象适配器 | 实现流程 )

    文章目录 I . 适配器模式概念 II . 适配器模式 适用场景 III . 适配器模式 优缺点 IV . 适配器模式 与 外观模式对比 V . 适配器模式 相关角色 ( 重点 ) VI . 适配器模 ...

  7. 用java的io做一个代码计数器,如何制作Java页面计数器_java

    大庆采油六厂采油工艺研究所 王兵 王波 常常逛WWW的人,一定对许多起始页上的计数器感兴趣.每当你光临某个站点的起始页时,它的计数器就很亲切地告诉你,从某年某月某日开始,你是第几位光临的人.你可能也想 ...

  8. 【源码+图片素材+详细教程】Java游戏开发_Java开发经典游戏飞翔的小鸟_飞扬的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java课程设计项目

    课程目标: 1.通过本课程的学习巩固Java的相关基础知识,例如循环判断,数组和集合的使用,对象的继承,接口的实现,窗口的创建,事件监听,图形绘制. 2.完成小鸟的移动,管道自动生成.碰撞死亡,计分系 ...

  9. android的适配器作用,适配器在Android中的作用是什么?

    适配器在Android中的作用是什么? 我想知道在Android环境中何时,何地以及如何使用适配器. 来自Android开发者文档的信息对我来说不够,我希望得到更详细的分析. 11个解决方案 39 v ...

最新文章

  1. Spring Cloud Alibba教程:Sentinel的使用
  2. linux环境调用gsoap,Linux下gSOAP的使用 (c++)
  3. iOS - Flutter混合开发
  4. SAP UI5 Mock server,为什么运行时无法返回 JSON 类型的测试数据?
  5. 高并发下秒杀商品,必须知道的9个细节
  6. 托雷基亚vs_奥特曼:上海英雄魂展来袭,托雷基亚和泰迦等身雕塑国内首秀,泽塔CV压轴...
  7. 排序(2):直接插入排序
  8. Item-Based Collaborative Recommender System
  9. 【图像去噪】基于matlab分裂Bregman算法图像去噪【含Matlab源码 1644期】
  10. 用javaScript实现轮播图效果 包括自动变换,按钮控制,上一张下一张切换
  11. 6个usb口服务器无响应,USB接口不能用(没反应)修复方法
  12. python开根号函数的实现
  13. 2021-11-10全球货币市场基础知识系列3
  14. 《余光中诗歌精读》放下代码,静下心来,细细品读
  15. ss服务器多端口配置及密码设置^_^
  16. 【unity中运行HTC VIVE的案例场景时一直不显示在头盔上,VR其他都正常】
  17. 记一次小程序的遇到的问题(使用uniapp编写)
  18. word文档标题级别批量更改——批量降级与升级实例
  19. 突破,中科大郭光灿院士团队首次实现多模式量子中继
  20. word 章节、图片(带章节)、公式自动编号

热门文章

  1. 电脑上的linux是什么文件夹,linux删除文件夹,详细教您电脑的linux怎么样删除文件夹...
  2. python runtime错误_Python错误:没有名为RuntimeE的模块
  3. 百度php笔试题目,12/11/17 百度PHP笔试题目整理
  4. oracle怎么以时间排序,查询表怎样按修改时间排序
  5. postgresql-9.2beta2 安装相关
  6. Python模块之: fractions模块-分数模块
  7. 书本练习题7print函数使用
  8. jqGrid表格展示简单实例
  9. [Swift]LeetCode599. 两个列表的最小索引总和 | Minimum Index Sum of Two Lists
  10. Semaphore实现原理分析