适配器模式

来源:互联网 发布:淘宝停留时间怎么看 编辑:程序博客网 时间:2024/06/05 07:57

作为两个不兼容接口的桥梁。比如读卡器。
现有的类不能满足现有的接口需要,通过继承或者依赖实现!
接口A。接口B. 适配器。
接口B要使用接口A的功能。适配器中使用A的实现类,实现A的功能,B实现适配器接口的功能。
主要解决正常运行系统的接口:
这里写图片描述

1接口一实现(实现增强功能)

public interface MediaPlayer {   public void play(String audioType, String fileName);}public interface AdvancedMediaPlayer {       public void playVlc(String fileName);   public void playMp4(String fileName);}public class VlcPlayer implements AdvancedMediaPlayer{   @Override   public void playVlc(String fileName) {      System.out.println("Playing 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("Playing mp4 file. Name: "+ fileName);           }}

2.接口2

public interface MediaPlayer {   public void play(String audioType, String fileName);}

3.适配器类

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();      }       }   @Override   public void play(String audioType, String fileName) {      if(audioType.equalsIgnoreCase("vlc")){         advancedMusicPlayer.playVlc(fileName);      }else if(audioType.equalsIgnoreCase("mp4")){         advancedMusicPlayer.playMp4(fileName);      }   }}

4.实现类-2

public class AudioPlayer implements MediaPlayer {   MediaAdapter mediaAdapter;    @Override   public 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");      }   }   }

测试

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");   }}