Github:AdapterPattern
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。
- 定义播放器接口
```java
/**
- 媒体播放器 */ public interface MediaPlayer{ void play(String mediaType, String filename); }
/**
- 高级播放器 */ public interface AdvancedMediaPlayer{ void playVlc(String filename); void playMp4(String filename); } ```
- 高级播放器实现类:vlc,mp4格式 ```java
/**
vlc播放器 */ public class VlcPlayer implements AdvancedMediaPlayer{ @Override public void playVlc(String filename) {
System.out.println("playing vlc file.");
}
@Override public void playMp4(String filename) {
} }
/**
MP4播放器 */ public class Mp4Player implements AdvancedMediaPlayer{ @Override public void playVlc(String filename) {
}
@Override public void playMp4(String filename) {
System.out.println("playing mp4 file.");
} }
3. 媒体适配器```java/*** 媒体播放适配器*/public class MediaAdapter implements MediaPlayer{private AdvancedMediaPlayer advancedMediaPlayer;public MediaAdapter(String type) {switch (type){case "vlc": advancedMediaPlayer = new VlcPlayer(); break;case "mp4": advancedMediaPlayer = new Mp4Player(); break;default: throw new IllegalArgumentException(type + " is not supported");}}@Overridepublic void play(String mediaType, String filename) {switch (mediaType){case "vlc": advancedMediaPlayer.playVlc(filename); break;case "mp4": advancedMediaPlayer.playMp4(filename); break;default: break;}}}
- 音频播放器
在音频播放器中增加媒体适配器。
/*** 音频播放器*/public class AudioPlayer implements MediaPlayer{MediaAdapter mediaAdapter;@Overridepublic void play(String mediaType, String filename) {switch (mediaType){case "mp3":System.out.println("playing mp3 file.");break;case "mp4":case "vlc":mediaAdapter = new MediaAdapter(mediaType);mediaAdapter.play(mediaType, filename);break;default:System.out.println("not supported");break;}}}
- test ```java public static void main(String[] args) { AdapterPattern pattern = new AdapterPattern(); pattern.adapter(); }
private void adapter() { AudioPlayer audioPlayer = new AudioPlayer(); audioPlayer.play(“mp3”, “aa.mp3”); audioPlayer.play(“mp4”, “aa.mp4”); audioPlayer.play(“vlc”, “aa.vlc”); audioPlayer.play(“mov”, “aa.mov”); }
输出结果:```javaplaying mp3 file.playing mp4 file.playing vlc file.not supported
