读书笔记之适配器模式
来源:互联网 发布:云计算都招聘什么岗位 编辑:程序博客网 时间:2024/06/03 23:38
适配器模式
简介:是作为两个不兼容的接口之间的桥梁,这种设计模式属于结构型模式,他结合了两个独立接口的功能。就像读卡器作为适配器连接内存卡和笔记本。
意图:将一个类的接口转换为客户希望的另一个接口,适配器模式使得由于接口不兼容不能一起工作的类可以一起工作
解决:主要解决软件系统中,将“现存的对象”放到新的环境中,而新环境要求的接口是现阶段不能满足的。
适配器继承或依赖已有的对象,实现想要的目标接口,在我们有动机的修改一个正常运行的系统接口时,这时候考虑使用适配器模式,它不是在详细设计时添加的,而是解决正在服役的项目。
首先我们有一个高级媒体播放器类正在运行:
接口为:
package cn.com.adapter;//高级媒体播放器public interface MediaPlayer { public void playVlc(String fileName); public void playMp4(String fileName);}
为了区别不同的功能,实现类有两个为:
public class Mp4Player implements MediaPlayer { @Override public void playVlc(String fileName) { // TODO Auto-generated method stub } @Override public void playMp4(String fileName) { System.out.println("play mp4 file,name:"+fileName); }}
package cn.com.adapter;public class VlcPlayer implements MediaPlayer { @Override public void playVlc(String fileName) { System.out.println("play vlc file,name:"+fileName); } @Override public void playMp4(String fileName) { // TODO Auto-generated method stub }}
我们还有一个mp3播放器:
接口为:
package cn.com.adapter;//mp3播放器的接口public interface Mp3Player { public void play(String audioType , String fileName);}
我们想将这两个高级播放功能添加到mp3播放器上,首先建立一个适配器mp3Adapter,将播放类型作为构造函数的参数,进一步来判断实例化哪一个高级播放器的功能类:
package cn.com.adapter;public class Mp3Adapter implements Mp3Player { MediaPlayer media; public Mp3Adapter(String audioType){ if(audioType.equals("vlc")){ media = new VlcPlayer(); }else if(audioType.equals("mp4")){ media = new Mp4Player(); } } @Override public void play(String audioType, String fileName) { // TODO Auto-generated method stub if(audioType.equals("vlc")){ media.playVlc(fileName); }else if(audioType.equals("mp4")){ media.playMp4(fileName); } }}
最后用一个新型播放器实现mp3的接口,如果是mp3的播放功能就直接播放,如果是高级播放功能,就调用适配器来处理:
package cn.com.adapter;public class AudioPlayer implements Mp3Player { Mp3Adapter mp3Adapter; @Override public void play(String audioType, String fileName) { // TODO Auto-generated method stub //播放MP3音乐文件的内置支持 if(audioType.equals("mp3")){ System.out.println("play mp3 file,name:"+fileName); }else if(audioType.equals("vlc")||audioType.equals("mp4")){ mp3Adapter = new Mp3Adapter(audioType); mp3Adapter.play(audioType, fileName); }else{ System.out.println("不支持"+audioType+"的类型"); } }}
最后来测试一下:
package cn.com.adapter;public class TetsAdapter { public static void main(String[] args) { AudioPlayer audioPlayer = new AudioPlayer(); audioPlayer.play("mp3", "年轻的战场.mp3"); audioPlayer.play("vlc", "love.vlc"); audioPlayer.play("mp4", "大话西游.mp4"); audioPlayer.play("avi", "NHDTA-788.avi"); audioPlayer.play("rmb", "RBX-154.rmb");}}
输出结果:
0 0
- 读书笔记之适配器模式
- 设计模式读书笔记之适配器模式(Adapter)
- 设计模式读书笔记之适配器模式(Adapter)
- 读书笔记之设计模式(适配器模式)
- 大话设计模式读书笔记之适配器模式
- 读书笔记14:适配器模式
- 读书笔记14:适配器模式
- 《java与模式》读书笔记之九----适配器模式(Adapter)
- 《设计模式解析》读书笔记之Adapter Pattern(适配器模式)
- 设计模式读书笔记-----适配器模式
- 设计模式读书笔记-----适配器模式
- 设计模式读书笔记-----适配器模式
- 设计模式读书笔记-----适配器模式
- 设计模式读书笔记-----适配器模式
- 《Head First Design Patterns》读书笔记之适配器模式
- 适配器模式之对象适配器
- 【读书笔记】大话设计模式—适配器模式
- 3.java设计模式(读书笔记)适配器模式
- Permission is only granted to system apps
- singleton
- 七步精通Python机器学习
- MyBatis动态sql详解(一)
- 设计模式原则—开闭原则(OCP)
- 读书笔记之适配器模式
- 二叉树的后序遍历--非递归实现
- java Stringbuffer的使用
- 100003. Tree
- CodeForces
- C#中DllImport用法汇总
- hdu2852 KiKi's K-Number 线段树
- LeetCode#91. Decode Ways
- Week Training: 452 Minimum Number of Arrows to Burst Balloons