適配器模式一般是在我們要把”現(xiàn)有的對(duì)象“應(yīng)用到新的環(huán)境中時(shí)使用,通過(guò)編寫(xiě)一個(gè)Adapter類(lèi),把原有的類(lèi)應(yīng)用到新的類(lèi)中,而不必修改原有類(lèi),也不必重寫(xiě)已有類(lèi)。
如下圖所示,原有一個(gè)AdvancedPlayer接口類(lèi),可以播放flv和MP4格式的視頻文件?,F(xiàn)在新建了一個(gè)MediaPlayer接口類(lèi),使之可以播放MP3、flv和MP4格式的文件。
因?yàn)橐延蠥dvancedPlayer接口類(lèi)實(shí)現(xiàn)了播放flv和MP4格式的文件,現(xiàn)在只需要編寫(xiě)一個(gè)播放MP3格式文件的AudioPlayer實(shí)現(xiàn)類(lèi)和一個(gè)Adapter實(shí)現(xiàn)類(lèi),在Adapter類(lèi)中使用AdvancedPlayer類(lèi)的對(duì)象,使之可以播放flv和MP4類(lèi)型的文件。

AdvancedPlayer接口類(lèi):
package adapter;
public interface AdvancedPlayer {
public void playFlv();
public void playMP4();
}
FlvPlayer實(shí)現(xiàn)類(lèi):
package adapter;
public class FlvPlayer implements AdvancedPlayer {
@Override
public void playFlv() {
System.out.println("播放Flv格式文件");
}
@Override
public void playMP4() {
}
}
MP4Player實(shí)現(xiàn)類(lèi):
package adapter;
public class MP4Player implements AdvancedPlayer{
@Override
public void playFlv() {
}
@Override
public void playMP4() {
System.out.println("播放MP4文件");
}
}
MediaPlayer接口類(lèi):
package adapter;
public interface MediaPlayer {
public void play(String audioType, String fileName);
}
AudioPlayer實(shí)現(xiàn)類(lèi):
package adapter;
public class AudioPlayer implements MediaPlayer {
Adapter adapter;
@Override
public void play(String audioType, String fileName) {
if(audioType.equals("MP3")) {
System.out.println("播放MP3:"+fileName);
}else if(audioType.equals("flv")||audioType.equals("MP4")) {
adapter=new Adapter(audioType);
adapter.play(audioType, fileName);
}else {
System.out.println("文件格式未知");
}
}
}
Adapter適配器實(shí)現(xiàn)類(lèi):
package adapter;
public class Adapter implements MediaPlayer{
AdvancedPlayer advancedPlayer;
public Adapter(String audioType) {
if(audioType.equals("flv")) {
advancedPlayer =new FlvPlayer();
}else if(audioType.equals("MP4")) {
advancedPlayer = new MP4Player();
}
}
@Override
public void play(String audioType,String fileName) {
if(audioType.equals("flv")){
advancedPlayer.playFlv();
}else if(audioType.equals("MP4")) {
advancedPlayer.playMP4();
}
}
}
主函數(shù)調(diào)用方式:
package main;
import adapter.*;
public class AdapterPattern {
public static void main(String[] args) {
AudioPlayer audioPlayer=new AudioPlayer();
audioPlayer.play("flv", "視頻.flv");
audioPlayer.play("MP4", "視頻.MP4");
audioPlayer.play("MP3", "音樂(lè).MP3");
}
}
-
適配器
+關(guān)注
關(guān)注
9文章
2129瀏覽量
71304 -
audio
+關(guān)注
關(guān)注
1文章
332瀏覽量
61436 -
AudioPlayer
+關(guān)注
關(guān)注
0文章
2瀏覽量
1611
發(fā)布評(píng)論請(qǐng)先 登錄
適配器模式和代理模式的區(qū)別
適配器模式實(shí)現(xiàn)
引適配器模式的作用
適配器模式相關(guān)資料推薦
缺省適配器模式基本概念
對(duì)象適配器模式基本概念
什么是硬件適配器模式
適配器模式的本質(zhì)及分類(lèi)
適配器模式和代理模式的區(qū)別
適配器模式的應(yīng)用
JavaScript設(shè)計(jì)模式之適配器模式
設(shè)計(jì)模式-適配器模式-以電壓適配器為例
什么是適配器模式?怎樣使用適配器模式進(jìn)行貨幣轉(zhuǎn)換?
什么是適配器模式
適配器模式設(shè)計(jì)
評(píng)論