Github:AdapterPattern
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。

  1. 定义播放器接口 ```java /**
    • 媒体播放器 */ public interface MediaPlayer{ void play(String mediaType, String filename); }

/**

  • 高级播放器 */ public interface AdvancedMediaPlayer{ void playVlc(String filename); void playMp4(String filename); } ```
  1. 高级播放器实现类:vlc,mp4格式 ```java

/**

  • vlc播放器 */ public class VlcPlayer implements AdvancedMediaPlayer{ @Override public void playVlc(String filename) {

    1. 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) {

    1. System.out.println("playing mp4 file.");

    } }

  1. 3. 媒体适配器
  2. ```java
  3. /**
  4. * 媒体播放适配器
  5. */
  6. public class MediaAdapter implements MediaPlayer{
  7. private AdvancedMediaPlayer advancedMediaPlayer;
  8. public MediaAdapter(String type) {
  9. switch (type){
  10. case "vlc": advancedMediaPlayer = new VlcPlayer(); break;
  11. case "mp4": advancedMediaPlayer = new Mp4Player(); break;
  12. default: throw new IllegalArgumentException(type + " is not supported");
  13. }
  14. }
  15. @Override
  16. public void play(String mediaType, String filename) {
  17. switch (mediaType){
  18. case "vlc": advancedMediaPlayer.playVlc(filename); break;
  19. case "mp4": advancedMediaPlayer.playMp4(filename); break;
  20. default: break;
  21. }
  22. }
  23. }
  1. 音频播放器

在音频播放器中增加媒体适配器。

  1. /**
  2. * 音频播放器
  3. */
  4. public class AudioPlayer implements MediaPlayer{
  5. MediaAdapter mediaAdapter;
  6. @Override
  7. public void play(String mediaType, String filename) {
  8. switch (mediaType){
  9. case "mp3":
  10. System.out.println("playing mp3 file.");
  11. break;
  12. case "mp4":
  13. case "vlc":
  14. mediaAdapter = new MediaAdapter(mediaType);
  15. mediaAdapter.play(mediaType, filename);
  16. break;
  17. default:
  18. System.out.println("not supported");
  19. break;
  20. }
  21. }
  22. }
  1. 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”); }

  1. 输出结果:
  2. ```java
  3. playing mp3 file.
  4. playing mp4 file.
  5. playing vlc file.
  6. not supported

参考

菜鸟教程 - 适配器模式