安康找卓电子技术有限公司

設(shè)計(jì)模式-適配器模式

適配器模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,它用于將一個(gè)類的接口轉(zhuǎn)換成另一個(gè)接口,以便于兩個(gè)不兼容的接口能夠一起


(相關(guān)資料圖)

適配器模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,它用于將一個(gè)類的接口轉(zhuǎn)換成另一個(gè)接口,以便于兩個(gè)不兼容的接口能夠一起工作。適配器模式有時(shí)也被稱為包裝器模式。

適配器模式包含以下角色:

目標(biāo)接口(Target Interface):定義客戶端所需的接口,這是客戶端代碼調(diào)用的接口。適配器(Adapter):適配器是一個(gè)類,它實(shí)現(xiàn)目標(biāo)接口并且包含一個(gè)對(duì)被適配對(duì)象的引用。被適配對(duì)象(Adaptee):被適配對(duì)象是一個(gè)已經(jīng)存在的對(duì)象,它的接口與目標(biāo)接口不兼容??蛻舳耍–lient):客戶端通過(guò)目標(biāo)接口調(diào)用適配器的方法來(lái)與被適配對(duì)象進(jìn)行交互。

下面是一個(gè)適配器模式的Java代碼示例:

首先定義一個(gè)目標(biāo)接口:

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

接著定義一個(gè)具體的被適配對(duì)象:

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

接下來(lái)定義適配器,它實(shí)現(xiàn)了目標(biāo)接口,并包含一個(gè)對(duì)被適配對(duì)象的引用:

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

最后定義一個(gè)客戶端,它通過(guò)目標(biāo)接口調(diào)用適配器的方法來(lái)與被適配對(duì)象進(jìn)行交互:

public class AudioPlayer implements MediaPlayer {   MediaAdapter mediaAdapter;    @Override   public void play(String audioType, String fileName) {              //播放 mp3 音樂(lè)文件的內(nèi)置支持      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");      }   }   }

這個(gè)例子中,客戶端調(diào)用了 MediaPlayer接口的 play方法。如果傳入的文件類型是 mp3,則直接在 AudioPlayer類中播放,否則就通過(guò)適配器模式實(shí)現(xiàn)播放其他格式的音頻文件。當(dāng)需要播放不支持的音頻格式時(shí),AudioPlayer類會(huì)創(chuàng)建一個(gè) MediaAdapter對(duì)象,該對(duì)象可以將不支持的音頻格式轉(zhuǎn)換成支持的格式,然后調(diào)用 MediaPlayer接口的 play方法來(lái)播放該格式的音頻文件。

使用適配器模式的好處是可以將兩個(gè)不兼容的接口進(jìn)行連接,從而實(shí)現(xiàn)代碼的復(fù)用和擴(kuò)展性的提高。如果有新的音頻格式需要支持,只需要實(shí)現(xiàn)一個(gè)新的適配器即可。

關(guān)鍵詞:
責(zé)任編輯:hn1007