wordpress制作功能型网站,爱做片视频网站,铁路建设监理协会网站,三明网站建设文章目录 一、适配器模式定义二、例子2.1 菜鸟教程例子2.1.1 定义两个不兼容的播放接口MediaPlayer 、AdvancedMediaPlayer2.1.2 定义AdvancedMediaPlayer两个实现类VlcPlayer 、Mp4Player2.1.3 定义适配器MediaAdapter2.1.4 定义AudioPlayer 并使用MediaAdapter2.1.5 使用 2.2… 文章目录 一、适配器模式定义二、例子2.1 菜鸟教程例子2.1.1 定义两个不兼容的播放接口MediaPlayer 、AdvancedMediaPlayer2.1.2 定义AdvancedMediaPlayer两个实现类VlcPlayer 、Mp4Player2.1.3 定义适配器MediaAdapter2.1.4 定义AudioPlayer 并使用MediaAdapter2.1.5 使用 2.2 JDK源码——InputStreamReader2.3 Spring源码——AdvisorAdapter 三、其他设计模式 一、适配器模式定义
别名 门面模式 类型 结构型模式 目的 将不兼容的接口 通过适配器 转换成可兼容的接口。
二、例子
2.1 菜鸟教程例子
2.1.1 定义两个不兼容的播放接口MediaPlayer 、AdvancedMediaPlayer
public interface MediaPlayer {public void play(String audioType, String fileName);
}public interface AdvancedMediaPlayer { public void playVlc(String fileName);public void playMp4(String fileName);
}2.1.2 定义AdvancedMediaPlayer两个实现类VlcPlayer 、Mp4Player
VlcPlayer
public class VlcPlayer implements AdvancedMediaPlayer{Overridepublic void playVlc(String fileName) {System.out.println(Playing vlc file. Name: fileName); }Overridepublic void playMp4(String fileName) {//什么也不做}
}Mp4Player
public class Mp4Player implements AdvancedMediaPlayer{Overridepublic void playVlc(String fileName) { //什么也不做 }Overridepublic void playMp4(String fileName) {System.out.println(Playing mp4 file. Name: fileName); }
}2.1.3 定义适配器MediaAdapter
将AdvancedMediaPlayer 接口适配MediaPlayer 接口
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);}}
}2.1.4 定义AudioPlayer 并使用MediaAdapter
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);}}
}2.1.5 使用
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);}
}2.2 JDK源码——InputStreamReader
InputStream接口适配Reader接口
public abstract class Reader implements Readable, Closeable {public int read(CharBuffer target) throws IOException {if (target.isReadOnly())throw new ReadOnlyBufferException();int nread;if (target.hasArray()) {char[] cbuf target.array();int pos target.position();int rem Math.max(target.limit() - pos, 0);int off target.arrayOffset() pos;nread this.read(cbuf, off, rem);if (nread 0)target.position(pos nread);} else {int len target.remaining();char[] cbuf new char[len];nread read(cbuf, 0, len);if (nread 0)target.put(cbuf, 0, nread);}return nread;}}public class InputStreamReader extends Reader {private final StreamDecoder sd;public InputStreamReader(InputStream in) {super(in);Charset cs Charset.defaultCharset();sd StreamDecoder.forInputStreamReader(in, lockFor(this), cs);}public int read(CharBuffer target) throws IOException {return sd.read(target);}
}2.3 Spring源码——AdvisorAdapter
切面适配器接口。
Advisor适配MethodInterceptor 接口
public interface AdvisorAdapter {boolean supportsAdvice(Advice advice);MethodInterceptor getInterceptor(Advisor advisor);
}
实现类MethodBeforeAdviceAdapter
class MethodBeforeAdviceAdapter implements AdvisorAdapter, Serializable {MethodBeforeAdviceAdapter() {}public boolean supportsAdvice(Advice advice) {return advice instanceof MethodBeforeAdvice;}public MethodInterceptor getInterceptor(Advisor advisor) {MethodBeforeAdvice advice (MethodBeforeAdvice)advisor.getAdvice();return new MethodBeforeAdviceInterceptor(advice);}
} 三、其他设计模式
创建型模式 结构型模式
1、设计模式——装饰器模式Decorator Pattern Spring相关源码
行为型模式
1、设计模式——访问者模式Visitor Pattern Spring相关源码2、设计模式——中介者模式Mediator Pattern JDK相关源码3、设计模式——策略模式Strategy Pattern Spring相关源码4、设计模式——状态模式State Pattern5、设计模式——命令模式Command Pattern Spring相关源码6、设计模式——观察者模式Observer Pattern Spring相关源码7、设计模式——备忘录模式Memento Pattern8、设计模式——模板方法模式Template Pattern Spring相关源码9、设计模式——迭代器模式Iterator Pattern Spring相关源码10、设计模式——责任链模式Chain of Responsibility Pattern Spring相关源码11、设计模式——解释器模式Interpreter Pattern Spring相关源码