設(shè)計模式-適配器模式
2023-05-04 02:05:48|
來源:騰訊云
適配器模式是一種結(jié)構(gòu)型設(shè)計模式,它用于將一個類的接口轉(zhuǎn)換成另一個接口,以便于兩個不兼容的接口能夠一起
(相關(guān)資料圖)
適配器模式是一種結(jié)構(gòu)型設(shè)計模式,它用于將一個類的接口轉(zhuǎn)換成另一個接口,以便于兩個不兼容的接口能夠一起工作。適配器模式有時也被稱為包裝器模式。
適配器模式包含以下角色:
目標(biāo)接口(Target Interface):定義客戶端所需的接口,這是客戶端代碼調(diào)用的接口。適配器(Adapter):適配器是一個類,它實(shí)現(xiàn)目標(biāo)接口并且包含一個對被適配對象的引用。被適配對象(Adaptee):被適配對象是一個已經(jīng)存在的對象,它的接口與目標(biāo)接口不兼容。客戶端(Client):客戶端通過目標(biāo)接口調(diào)用適配器的方法來與被適配對象進(jìn)行交互。下面是一個適配器模式的Java代碼示例:
首先定義一個目標(biāo)接口:
public interface MediaPlayer { public void play(String audioType, String fileName);}
接著定義一個具體的被適配對象:
public class Mp4Player { public void playMp4(String fileName) { System.out.println("Playing mp4 file. Name: "+ fileName); }}
接下來定義適配器,它實(shí)現(xiàn)了目標(biāo)接口,并包含一個對被適配對象的引用:
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); } }}
最后定義一個客戶端,它通過目標(biāo)接口調(diào)用適配器的方法來與被適配對象進(jìn)行交互:
public class AudioPlayer implements MediaPlayer { MediaAdapter mediaAdapter; @Override public void play(String audioType, String fileName) { //播放 mp3 音樂文件的內(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"); } } }
這個例子中,客戶端調(diào)用了 MediaPlayer
接口的 play
方法。如果傳入的文件類型是 mp3
,則直接在 AudioPlayer
類中播放,否則就通過適配器模式實(shí)現(xiàn)播放其他格式的音頻文件。當(dāng)需要播放不支持的音頻格式時,AudioPlayer
類會創(chuàng)建一個 MediaAdapter
對象,該對象可以將不支持的音頻格式轉(zhuǎn)換成支持的格式,然后調(diào)用 MediaPlayer
接口的 play
方法來播放該格式的音頻文件。
使用適配器模式的好處是可以將兩個不兼容的接口進(jìn)行連接,從而實(shí)現(xiàn)代碼的復(fù)用和擴(kuò)展性的提高。如果有新的音頻格式需要支持,只需要實(shí)現(xiàn)一個新的適配器即可。
關(guān)鍵詞: