摘要:這個(gè)模式涉及到單個(gè)類,該類負(fù)責(zé)接入獨(dú)立的不兼容的接口。第二步創(chuàng)建實(shí)體類實(shí)現(xiàn)接口。內(nèi)置支持播放類型的音樂提供播放其他格式音頻文件的支持第五步使用播放不同種類的音頻格式。
設(shè)計(jì)模式-適配器模式原文鏈接
譯者:smallclover
個(gè)人翻譯,水平有限,如有錯(cuò)誤歡迎指出,謝謝!
適配器模式作為橋梁,連接兩個(gè)不兼容的接口。這種類型的設(shè)計(jì)模式來源于結(jié)構(gòu)型模式,它具有結(jié)合兩個(gè)相互獨(dú)立的接口的能力。
這個(gè)模式涉及到單個(gè)類,該類負(fù)責(zé)接入獨(dú)立的、不兼容的接口。一個(gè)現(xiàn)實(shí)生活的例子,比如說讀卡器,它可能會(huì)在記憶卡和筆記本電腦之間扮演一個(gè)適配者的角色。首先把記憶卡插到讀卡器上,在把讀卡器插入筆記本上,然后我們就可以從筆記本讀取記憶卡上的數(shù)據(jù)。
我們通過以下的例子來展示適配器模式。一個(gè)音頻播放器設(shè)備只能播放mp3文件;而另一個(gè)比較先進(jìn)的音樂播放器可以播放vlc和mp4文件。
我們有一個(gè)MediaPlayer接口和一個(gè)實(shí)現(xiàn)該接口的實(shí)體類AudioPlayer,這個(gè)AudioPlayer默認(rèn)播放mp3格式的音頻。
我們還有另外一個(gè)接口 AdvancedMediaPalyer 和實(shí)現(xiàn)該接口的實(shí)體類
這些實(shí)體類可以播放vlc和mp4格式的音頻。
我們希望AudioPlayer也可以播放其他格式的文件。為了實(shí)現(xiàn)這個(gè)目標(biāo),我們創(chuàng)建了一個(gè)適配器類MediaAdapter,該類實(shí)現(xiàn)了接口MediaPlayer,并且使用AdvancedMediaPlayer的對(duì)象來播放需要的格式。
AudioPlayer 使用適配器類 MediaAdapter,通過它來播放所期望的音頻類型,不需要知道實(shí)際是哪個(gè)類播放這個(gè)期望的音頻類型。AdapterPatternDemo,我們的demo類將使用AudioPlayer類來播放各種格式的音頻。
第一步創(chuàng)建MediaPlayer和AdvancedMediaPlayer接口。
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); }第二步
創(chuàng)建實(shí)體類實(shí)現(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) { //什么 } }
Mp4Player.java
public class Mp4Player implements AdvancedMediaPlayer{ @Override public void playVlc(String fileName) { //什么也不做 } @Override public void playMp4(String fileName) { System.out.println("Playing mp4 file. Name: "+ fileName); } }第三步
創(chuàng)建一個(gè)適配器類實(shí)現(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); } } }第四步
創(chuàng)建實(shí)體類實(shí)現(xiàn)MediaPlayer接口。
AudioPlayer.java
public class AudioPlayer implements MediaPlayer { MediaAdapter mediaAdapter; @Override public void play(String audioType, String fileName) { //內(nèi)置支持播放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"); } } }第五步
使用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"); } }第六步
校驗(yàn)輸出。
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
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/65699.html
摘要:大意就是作者把種不斷的重組歸納抽象直道最后抽象為一種設(shè)計(jì)模式,。而所有的關(guān)注的核心問題就是如何控制信息流但是我個(gè)人認(rèn)為核心是如何解耦。再根據(jù)信息流劃分出對(duì)象在系統(tǒng)中擔(dān)任的種角色,。所以歸為一種核心所有的的職責(zé)都是控制。 Overview 今天看了YouTube上的一個(gè)講Design Pattern的視頻,把這個(gè)視頻的大意給大家分享一下,該視頻的作者是Anthony Ferrara。 ...
摘要:調(diào)用者對(duì)象會(huì)尋找合適的并且能夠處理該命令的對(duì)象,然后把該命令傳遞給相應(yīng)的對(duì)象處理。緊接著創(chuàng)建一個(gè)類代表請(qǐng)求。創(chuàng)建具體的命令類和實(shí)現(xiàn)接口,它們將會(huì)作為具體的命令被處理。代表調(diào)用者,它能獲得并且發(fā)出命令。 原文連接譯者 smallclover希望對(duì)大家有所幫助。謝謝!(●?●) 設(shè)計(jì)模式-命令模式 命令模式是一種數(shù)據(jù)驅(qū)動(dòng)的設(shè)計(jì)模式,屬于行為型模式這一類。命令模式會(huì)將一個(gè)請(qǐng)求包裝成一個(gè)對(duì)象并...
摘要:在代理模式中,我們將創(chuàng)建一個(gè)對(duì)象,該對(duì)象在在接口中持有原始對(duì)象,以對(duì)外部提供它的功能。實(shí)現(xiàn)我們將創(chuàng)建一個(gè)接口并且創(chuàng)建具體類實(shí)現(xiàn)接口。 原文鏈接譯者:smallclover希望對(duì)你們有所幫助,謝謝閱讀! 設(shè)計(jì)模式-代理模式 在代理模式中,我們使用一個(gè)類來代表另一個(gè)類的功能。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型設(shè)計(jì)模式的一種。在代理模式中,我們將創(chuàng)建一個(gè)對(duì)象,該對(duì)象在在接口中持有原始對(duì)象,以對(duì)外部...
摘要:實(shí)現(xiàn)我們將創(chuàng)建一個(gè)接口,并且創(chuàng)建具體的類實(shí)現(xiàn)它。接下來我們需要聲明一個(gè)門面類。,我們的類將通過使用類來展示這些結(jié)果。 原文鏈接譯者:smallclover希望對(duì)大家有所幫助!Thanks for your watching 門面模式 門面模式隱藏系統(tǒng)的復(fù)雜性同時(shí)會(huì)提供一個(gè)接口給用戶,使得用戶可以使用該系統(tǒng)。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式的一種,它將會(huì)添加一個(gè)接口到現(xiàn)有的系統(tǒng)當(dāng)中,用戶...
摘要:迭代器模式屬于行為型模式下的一種。實(shí)現(xiàn)我們將創(chuàng)建一個(gè)接口,該接口描述迭代所需要的方法緊接著聲明了一個(gè)接口,該接口返回一個(gè)對(duì)象。我們會(huì)創(chuàng)建具體的類實(shí)現(xiàn)接口和接口,并去使用它們。第三步使用獲得迭代器并且打印。 原文地址譯者 smallclover希望對(duì)你們有所幫助 設(shè)計(jì)模式-迭代器模式 迭代器是Java和.Net程序環(huán)境下經(jīng)常使用的一種設(shè)計(jì)模式。這種設(shè)計(jì)模式通常用來獲取能順序訪問集合對(duì)元素...
閱讀 1442·2023-04-25 17:18
閱讀 1882·2021-10-27 14:18
閱讀 2124·2021-09-09 09:33
閱讀 1840·2019-08-30 15:55
閱讀 2016·2019-08-30 15:53
閱讀 3440·2019-08-29 16:17
閱讀 3429·2019-08-26 13:57
閱讀 1730·2019-08-26 13:46