代碼詳解設計模式--適配器模式

適配器模式

  作爲兩個不兼容的接口之間的橋樑,結合了兩個獨立接口的功能。

  • 優點
  1. 可以讓任何兩個沒有關聯的類一起運行。
  2. 提高了類的複用。
  3. 增加了類的透明度。
  4. 靈活性好。
  • 缺點
  1. 過多地使用適配器,會讓系統非常零亂,不易整體進行把握。

UML

// 播放器接口
public interface MediaPlayer {
   public void play(String audioType, String fileName);
}

// 拓展播放器接口
public interface AdvancedMediaPlayer { 
   public void playFlv(String fileName);
   public void playMp4(String fileName);
}

// FLV播放器
public class FlvPlayer implements AdvancedMediaPlayer{
   @Override
   public void playFlv(String fileName) {
      System.out.println("播放FLV文件: "+ fileName);      
   }
 
   @Override
   public void playMp4(String fileName) {
      //什麼也不做
   }
}

// MP4播放器
public class Mp4Player implements AdvancedMediaPlayer{
   @Override
   public void playFlv(String fileName) {
      //什麼也不做
   }
 
   @Override
   public void playMp4(String fileName) {
      System.out.println("播放MP4文件: "+ fileName);      
   }
}

// 播放器適配器
public class MediaAdapter implements MediaPlayer {
   AdvancedMediaPlayer advancedMusicPlayer;
 
   public MediaAdapter(String audioType){
      if(audioType.equalsIgnoreCase("FLV") ){
         advancedMusicPlayer = new FlvPlayer();       
      } else if (audioType.equalsIgnoreCase("MP4")){
         advancedMusicPlayer = new Mp4Player();
      }  
   }
 
   @Override
   public void play(String audioType, String fileName) {
      if(audioType.equalsIgnoreCase("FLV")){
         advancedMusicPlayer.playFlv(fileName);
      } else if(audioType.equalsIgnoreCase("MP4")){
         advancedMusicPlayer.playMp4(fileName);
      }
   }
}

// 音頻播放器
public class AudioPlayer implements MediaPlayer {
   MediaAdapter mediaAdapter; 
 
   @Override
   public void play(String audioType, String fileName) {
      // mediaAdapter 提供了播放其他文件格式的支持
      if(audioType.equalsIgnoreCase("FLV") || audioType.equalsIgnoreCase("MP4")){
         mediaAdapter = new MediaAdapter(audioType);
         mediaAdapter.play(audioType, fileName);
      } else if(audioType.equalsIgnoreCase("MP3")){
         // 內置支持MP3文件
         System.out.println("播放MP3文件: "+ fileName); 
      } else{
         System.out.println("不支持文件格式:" + audioType);
      }
   }   
}

// 使用示例
public class Demo {
   public static void main(String[] args) {
      AudioPlayer audioPlayer = new AudioPlayer();
      audioPlayer.play("mp3", "a.mp3");
      audioPlayer.play("mp4", "b.mp4");
      audioPlayer.play("flv", "c.flv");
      audioPlayer.play("avi", "d.avi");
   }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章