适配器模式
来源:互联网 发布:淘宝商品详情api 编辑:程序博客网 时间:2024/05/16 15:40
目的
- 将一个类的接口转换成客户希望的另一个接口。适配器模式是作为两个不兼容的接口之间的桥梁。
优点
- 可以让任何两个没有关联的类一起运行
- 提高了类的复用
- 增加了类的透明度
- 灵活性好
缺点
- 过多的使用适配器,会让系统非常凌乱,不易整体把握。如果不是很有必要,可以不使用适配器,而是直接对系统进行重构
- 由于java只能继承一个类,所以至多只能适配一个适配者类,而且目标必须是抽象类
注意事项 - 适配器不是在详细设计时添加的,而是解决正在服役的项目的问题
第一步
- 为媒体播放器和更高级的媒体播放器创建接口
- MediaPlayer.java、AdvancedMediaPlayer.java
public interface MediaPlayer { public void play(String audioType,String fileName);}
public interface AdvancedMediaPlayer { public void playVlc(String fileName); public void playMp4(String fileName);}
第二步
- 创建实现了 AdvancedMediaPlayer 接口的实体类
- VlcPlayer.java、Mp4Player.java
public class VlcPlayer implements AdvancedMediaPlayer { @Override public void playVlc(String fileName) { System.out.println("Play vlc file. Name:" + fileName); } @Override public void playMp4(String fileName) { }}
public class Mp4Player implements AdvancedMediaPlayer { @Override public void playVlc(String fileName) { } @Override public void playMp4(String fileName) { System.out.println("Play mp4 file. Name:" + fileName); }}
第三步
- 创建实现了 MediaPlayer 接口的适配器类
- MediaAdapter.java
public class MediaAdapter implements MediaPlayer { private AdvancedMediaPlayer advancedMediaPlayer; public MediaAdapter(String audioType) { if (audioType.equalsIgnoreCase("vlc")) { advancedMediaPlayer = new VlcPlayer(); }else if (audioType.equalsIgnoreCase("mp4")) { advancedMediaPlayer = new Mp4Player(); } } @Override public void play(String audioType, String fileName) { if (audioType.equalsIgnoreCase("vlc")) { advancedMediaPlayer.playVlc(fileName); }else if (audioType.equalsIgnoreCase("mp4")) { advancedMediaPlayer.playMp4(fileName); } }}
第四步
- 创建实现了 MediaPlayer 接口的实体类
- AudioPlayer.java
public class AudioPlayer implements MediaPlayer { MediaAdapter mediaAdapter; @Override public void play(String audioType, String fileName) { if (audioType.equalsIgnoreCase("mp3")) { System.out.println("Play mp3 file. Name:"+fileName); }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."); } }}
第五步
- 使用 AudioPlayer 来播放不同类型的音频格式
- AdapterDemo.java
public class AdapterDemo { public static void main(String[] args) { AudioPlayer audioPlayer = new AudioPlayer(); audioPlayer.play("mp3", "飞飞飞.mp3"); audioPlayer.play("mp4", "哇哈哈.mp4"); audioPlayer.play("vlc", "偶滴神.vlc"); audioPlayer.play("avi", "放假咯.avi"); }}
第六步
- 收获结果
Play mp3 file. Name:飞飞飞.mp3Play mp4 file. Name:哇哈哈.mp4Play vlc file. Name:偶滴神.vlcInvalid media.avi format not supported.
阅读全文
0 0
- 适配器及适配器模式
- 适配器及适配器模式
- 适配器模式(类适配器)
- 适配器模式(默认适配器)
- 适配器模式(对象适配器)
- 适配器模式-类适配器
- 适配器模式-对象适配器
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- ios 11以上系统,tableview上啦刷新,indexPath.row,自动加5,引起数组越界的问题导致崩溃
- java后台api间的相互调用
- 欢迎使用CSDN-markdown编辑器
- HDU-2023(求平均成绩)
- JAVA_类_调用_方法
- 适配器模式
- 安装nginx并配置相关的环境变量
- AlertDialog修改标题、内容、按钮的颜色和字体大小
- JS——最简单的验证码程序(不区分大小写)
- opencv分类器训练
- 【干货#007】标签机打印小程序参数二维码的方法
- dubbo -7持续集成 svn与maven的安装
- Linux 下安装JDK,并配置相关环境变量
- Vim自动补全神器:YouCompleteMe