設(shè)計(jì)模式-適配器模式
【資料圖】
適配器模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,它用于將一個(gè)類(lèi)的接口轉(zhuǎn)換成另一個(gè)接口,以便于兩個(gè)不兼容的接口能夠一起工作。適配器模式有時(shí)也被稱(chēng)為包裝器模式。
適配器模式包含以下角色:
目標(biāo)接口(Target Interface):定義客戶(hù)端所需的接口,這是客戶(hù)端代碼調(diào)用的接口。適配器(Adapter):適配器是一個(gè)類(lèi),它實(shí)現(xiàn)目標(biāo)接口并且包含一個(gè)對(duì)被適配對(duì)象的引用。被適配對(duì)象(Adaptee):被適配對(duì)象是一個(gè)已經(jīng)存在的對(duì)象,它的接口與目標(biāo)接口不兼容。客戶(hù)端(Client):客戶(hù)端通過(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è)客戶(hù)端,它通過(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è)例子中,客戶(hù)端調(diào)用了 MediaPlayer接口的 play方法。如果傳入的文件類(lèi)型是 mp3,則直接在 AudioPlayer類(lèi)中播放,否則就通過(guò)適配器模式實(shí)現(xiàn)播放其他格式的音頻文件。當(dāng)需要播放不支持的音頻格式時(shí),AudioPlayer類(lèi)會(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è)新的適配器即可。
標(biāo)簽:
美聯(lián)儲(chǔ)加息意味著什么?美聯(lián)儲(chǔ)加息對(duì)金價(jià)有什么影響?
貸款選擇等額本金還是等額本息?等額本金等額本息有什么區(qū)別?
別克將推出全新一代君越,外觀內(nèi)飾首曝光-世界新動(dòng)態(tài)
贛州首家特斯拉中心正式開(kāi)業(yè) 服務(wù)范圍輻射贛粵閩-全球時(shí)快訊
裝修能提取公積金嗎?公積金提取幾天可以到賬?
股票短線(xiàn)看哪個(gè)k線(xiàn)指標(biāo)?短線(xiàn)怎么選股?
上班族炒股有什么技巧?上班族為什么不適合短線(xiàn)炒股?
最新資訊:錦湖輪胎質(zhì)量怎么樣多少錢(qián)_錦湖輪胎質(zhì)量怎么樣
- 01 聯(lián)想一鍵恢復(fù)6.0怎么恢復(fù)系統(tǒng)?聯(lián)想一鍵恢復(fù)系統(tǒng)怎么操作?
- 02 微軟Edge瀏覽器搜索無(wú)法使用怎么辦?Win10電腦鍵盤(pán)用不了的原因分析
- 03 【世界獨(dú)家】夏天暴曬,為什么電動(dòng)車(chē)要用全景天幕?
- 04 smart精靈#1于4月在華交付4,390臺(tái) 每日消息
- 05 打工新鮮事兒|狂飆的“五一”收官!背后有他們的勞動(dòng)付出……|全球快播報(bào)
- 06 筆記本電腦可以打電話(huà)了嗎?在筆記本上怎么打電話(huà)?
- 07 MSN都有哪幾種登陸的郵箱格式?電子郵箱格式怎么寫(xiě)?
- 08 《長(zhǎng)月?tīng)a明》真相大白后,男女主大方戀愛(ài)
- 09 平板電腦開(kāi)不開(kāi)機(jī)了怎么辦?平板電腦常見(jiàn)故障有哪些?
- 010 微信怎么點(diǎn)亮圖標(biāo)?微信圖標(biāo)隱藏了怎么弄出來(lái)?

