鍍金池/ 教程/ Java/ Java適配器模式
Java前端控制器模式
Java工廠設計模式
Java抽象工廠模式
Java觀察者模式
Java門面模式(或外觀模式)
Java備忘錄模式
Java MVC模式
Java單例模式
Java傳輸對象模式
Java迭代器模式
Java責任鏈模式
Java命令模式
Java原型模式
Java解釋器模式
Java適配器模式
Java狀態(tài)模式
Java中介者模式(Mediator Pattern)
Java攔截過濾器模式
Java策略模式
Java組合模式
Java業(yè)務代理模式
Java裝飾模式
Java模板模式
Java橋接模式
Java過濾器模式(條件模式)
Java享元模式(Flyweight Pattern)
Java建造者(Builder)模式
Java設計模式
Java空對象模式
Java數(shù)據(jù)訪問對象模式
Java訪問者模式
Java組合實體模式
Java服務定位器模式

Java適配器模式

適配器模式作為兩個不兼容接口之間的橋梁。 這種類型的設計模式屬于結(jié)構(gòu)模式,因為該模式組合了兩個獨立接口。

這種模式涉及一個單獨的類,它負責連接獨立或不兼容接口的功能。 現(xiàn)實生活的例子- 讀卡器的,其用作為存儲卡和筆記本電腦之間的適配器。將存儲卡插入讀卡器并將讀卡器插入筆記本電腦接口,以便可以通過筆記本電腦讀取存儲卡。

我們通過以下示例演示適配器模式的使用。音頻播放器設備只能播放mp3文件,但希望能夠?qū)崿F(xiàn)一個可播放vlcmp4文件的高級音頻播放器。

實現(xiàn)實例

有一個MediaPlayer接口和一個具體的類-AudioPlayer它實現(xiàn)了MediaPlayer接口。 默認情況下,音頻播放器(AudioPlayer )可以播放mp3格式的音頻文件。

還有另一個接口AdvancedMediaPlayer 和實現(xiàn)AdvancedMediaPlayer 接口的具體類。 這些類可以播放vlcmp4格式的文件。

想讓AudioPlayer播放其他格式。要實現(xiàn)這一點,需要創(chuàng)建了一個適配器類MediaAdapter,它實現(xiàn)了MediaPlayer接口并使用AdvancedMediaPlayer對象來播放所需的格式。

AudioPlayer使用適配器類MediaAdapter傳遞它所需的音頻類型,而不知道可以播放所需格式的實際類。 AdapterPatternDemo這是一個演示類,它將使用AudioPlayer類來播放各種格式。

實現(xiàn)結(jié)構(gòu)如下圖所示 -

第1步

分別創(chuàng)建媒體播放器和高級媒體播放器接口。代碼如下所示 -

MediaPlayer.java

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

AdvancedMediaPlayer.java

public interface AdvancedMediaPlayer {    
   public void playVlc(String fileName);
   public void playMp4(String fileName);
}

第2步

創(chuàng)建實現(xiàn)AdvancedMediaPlayer接口的具體類。

VlcPlayer.java

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) {
      //do nothing
   }
}

Mp4Player.java

public class Mp4Player implements AdvancedMediaPlayer{

   @Override
   public void playVlc(String fileName) {
      //do nothing
   }

   @Override
   public void playMp4(String fileName) {
      System.out.println("Playing mp4 file. Name: "+ fileName);        
   }
}

第3步

創(chuàng)建實現(xiàn)MediaPlayer接口的適配器類。

MediaAdapter.java

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步

創(chuàng)建一個實現(xiàn)MediaPlayer接口的具體類。

AudioPlayer.java

public class AudioPlayer implements MediaPlayer {
   MediaAdapter mediaAdapter; 

   @Override
   public void play(String audioType, String fileName) {        

      //inbuilt support to play mp3 music files
      if(audioType.equalsIgnoreCase("mp3")){
         System.out.println("Playing mp3 file. Name: " + fileName);            
      } 

      //mediaAdapter is providing support to play other file formats
      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");
      }
   }   
}

第5步

使用AudioPlayer播放不同類型的音頻格式。

AdapterPatternDemo.java

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

第6步

驗證輸出結(jié)果,執(zhí)行上面的代碼得到以下結(jié)果 -

Playing mp3 file. Name: beyond the horizon.mp3
Playing mp4 file. Name: alone.mp4
Playing vlc file. Name: far far away.vlc
Invalid media. avi format not supported

上一篇:Java MVC模式下一篇:Java橋接模式