设计模式学习笔记--适配器模式
来源:互联网 发布:mac解压缩软件 编辑:程序博客网 时间:2024/06/05 07:41
六、适配器模式
适配器模式(Adapter Pattern)作为两个不兼容接口之间的桥梁。
简介
适配器主要用于桥接两个不同接口之间,使之能进行联动工作。
优点:可以让任何连个没有关联的类一起运行,提高了类的复用,增加了类的透明度,灵活性好。
缺点:过多的使用适配器,会造成系统凌乱。Java至多继承一个类,只能适配一个适配器类,且是抽象类。
实现
演示一个Media Player接口和实现该接口的实体类AutoPlayer
。默认情况下autoplayer可以播放mp3格式音乐。
另AdvancedMediaPlayer
接口和实现接口的实体类,可以播放vlc和mp4文件。
若想要AutoPlayer
可以播放其他格式音频,需要创建实现了MediaPlayer
接口的适配器, MediaAdapter
,并使用AdvancedMediaPlayer
来播放所需格式。 AutoPlayer
使用适配器类MediaAdapter
传递所需的音频类型,不需要知道能播放该格式音频的实际类。
AdapterPatternDemo用于演示该情景
- 创建接口
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);}
- 创建实现类
VlcPlayer.java
public class VlcPlayer implements AdvancedMediaPlayer { @override public void playVlc(String fileName){ System.out.println("播放的vlc文件:" + fileName); } @override public void playMp4(Sting fileName){ //因为这是Vlc播放器,就不实现mp4的功能了。 }}
Mp4Player.java
public class Mp4Player implements AdvancedMediaPlayer { @override public void playVlc(String fileName){ //MP4播放器,不需要实现该功能 } @override public void playMp4(String fileName){ System.out.println("播放MP4的文件: "+fileName); }}
- 创建适配器
MediaAdapter.java
public class MediaAdapter implements MediaPlayer { //适配器实现MediaPlayer接口,然后内部对接AdvancedMediaPlayer接口,来实现两个接口功能的衔接 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); } }}
- 接口实现类
AudioPlayer.java
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"); } } }
- 演示
AdapterPatternDemo.java
public class AdapterPatternDemo { public static void main(String[] args) { AudioPlayer audioPlayer = new AudioPlayer(); //原有的audioPlayer只能播放MP3,现在的扩展了adapter,实现了更多功能的播放。 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"); }}
- 输出
Playing mp3 file. Name: beyond the horizon.mp3Playing mp4 file. Name: alone.mp4Playing vlc file. Name: far far away.vlcInvalid media. avi format not supported
0 0
- 设计模式学习笔记之适配器模式
- 设计模式学习笔记-适配器模式
- java设计模式学习笔记-适配器模式
- 设计模式学习笔记--适配器(Adapter)模式
- 设计模式学习笔记-适配器模式
- 设计模式学习笔记-适配器模式
- 设计模式学习笔记-适配器模式
- [设计模式学习笔记]Adapter适配器模式
- 设计模式学习笔记十四:适配器模式
- 设计模式学习笔记-适配器模式
- 设计模式学习笔记--适配器模式
- 设计模式学习笔记-适配器模式
- 设计模式学习笔记-适配器模式
- 设计模式学习笔记之适配器模式
- 设计模式学习笔记-适配器模式
- java设计模式学习笔记--适配器模式
- 设计模式学习笔记--适配器模式
- 学习设计模式笔记--适配器模式
- Git repository of Frank Liu--Frank Liu的Git仓库
- 第十二周项目五 迷宫问题之图深度优先遍历解法
- 平衡二叉树结点的插入和调整
- select count(*) ,count() , select *
- 第十三周项目1-Prim的算法验证
- 设计模式学习笔记--适配器模式
- 219. Contains Duplicate II
- 程序员必知的8大排序(四)-------归并排序,基数排序(java实现)
- KMP算法总结
- Android Launcher3 Shortcut 包名两行显示相切的问题。
- 第十三周项目四(Floyd算法实现)
- java.lang.IllegalArgumentException: java.net.UnknownHostException: user 错误解决
- 第十三周-项目一 验证算法(4)
- 第十一周项目2 用二叉树求解代数表达式