日期:2023-05-05 10:40:48 來源:騰訊云
【資料圖】
適配器模式是一種結構型設計模式,它用于將一個類的接口轉換成另一個接口,以便于兩個不兼容的接口能夠一起工作。適配器模式有時也被稱為包裝器模式。
適配器模式包含以下角色:
目標接口(Target Interface):定義客戶端所需的接口,這是客戶端代碼調用的接口。適配器(Adapter):適配器是一個類,它實現目標接口并且包含一個對被適配對象的引用。被適配對象(Adaptee):被適配對象是一個已經存在的對象,它的接口與目標接口不兼容。客戶端(Client):客戶端通過目標接口調用適配器的方法來與被適配對象進行交互。下面是一個適配器模式的Java代碼示例:
首先定義一個目標接口:
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); }}
接下來定義適配器,它實現了目標接口,并包含一個對被適配對象的引用:
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); } }}
最后定義一個客戶端,它通過目標接口調用適配器的方法來與被適配對象進行交互:
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"); } } }
這個例子中,客戶端調用了 MediaPlayer
接口的 play
方法。如果傳入的文件類型是 mp3
,則直接在 AudioPlayer
類中播放,否則就通過適配器模式實現播放其他格式的音頻文件。當需要播放不支持的音頻格式時,AudioPlayer
類會創建一個 MediaAdapter
對象,該對象可以將不支持的音頻格式轉換成支持的格式,然后調用 MediaPlayer
接口的 play
方法來播放該格式的音頻文件。
使用適配器模式的好處是可以將兩個不兼容的接口進行連接,從而實現代碼的復用和擴展性的提高。如果有新的音頻格式需要支持,只需要實現一個新的適配器即可。
標簽:
下一篇: 最后一頁
設計模式-適配器模式
【全球播資訊】哈爾濱現不明飛行物 專家分析來了
中國銀行漲5.33%,股價創歷史新高-全球微動態
育拔尖人才,強基礎研究根基
【全球速看料】【雙生花 番外】不動的明王 其二十
柏誠股份:5月4日融資買入831.31萬元,融資融券余額1.03億元 全球微頭條
熱文:筆記本電腦顯示屏不亮怎么辦_筆記本電腦顯示屏不亮
當前看點!起酥油是什么油回民能吃嗎_起酥油是什么油
我國海拔最高特高壓變電站主體開工建設 全球熱點
OpenAI在2022年的虧損翻番至5.4億美元 開發和人工成本高昂 看熱訊
又是黑哨?CBA浙江1分險勝,2大名嘴痛批裁判,姚明你真該管管了_滾動
5月4日基金凈值:信澳周期動力混合A最新凈值1.4482,漲0.19%
讀卡器讀不出內存卡提示格式化了_讀卡器讀不出內存卡提示格式化_當前速遞
上海將推進“有組織的科研”提升科技攻關效率
秦州區開展成品油雙隨機抽查工作
當前信息:假期余額告急?這些人延長放假!
今天打開個稅APP,我直接人麻了!|世界熱議
嘉應制藥股東戶數下降1.53%,戶均持股15.61萬元|全球快報
單個企業年度最高補助500萬元!山東提出建立完善科技型企業研發投入補助機制 環球熱訊
凱旺科技:截止2023年4月28日,公司股東人數為9822人(戶)
世界最新:漢儀股份:AIGC技術暫時僅應用于公司字體產品設計
每日快看:TVB實力男星憑新劇出圈!與林峯同期出道,演盡反派角色惹人憎
招商伊敦將在合肥建計容面積10.3萬平方米的保租房租賃社區
比亞迪宋Pro DM-i冠軍版官圖 外觀造型變化較大
僅剩3到6個月!全球碳酸飲料可能面臨斷市?原因是…