適配器模式一般是在我們要把”現(xiàn)有的對(duì)象“應(yīng)用到新的環(huán)境中時(shí)使用,通過編寫一個(gè)Adapter類,把原有的類應(yīng)用到新的類中,而不必修改原有類,也不必重寫已有類。
如下圖所示,原有一個(gè)AdvancedPlayer接口類,可以播放flv和MP4格式的視頻文件。現(xiàn)在新建了一個(gè)MediaPlayer接口類,使之可以播放MP3、flv和MP4格式的文件。
因?yàn)橐延蠥dvancedPlayer接口類實(shí)現(xiàn)了播放flv和MP4格式的文件,現(xiàn)在只需要編寫一個(gè)播放MP3格式文件的AudioPlayer實(shí)現(xiàn)類和一個(gè)Adapter實(shí)現(xiàn)類,在Adapter類中使用AdvancedPlayer類的對(duì)象,使之可以播放flv和MP4類型的文件。
AdvancedPlayer接口類:
package adapter;
public interface AdvancedPlayer {
public void playFlv();
public void playMP4();
}
FlvPlayer實(shí)現(xiàn)類:
package adapter;
public class FlvPlayer implements AdvancedPlayer {
@Override
public void playFlv() {
System.out.println("播放Flv格式文件");
}
@Override
public void playMP4() {
}
}
MP4Player實(shí)現(xiàn)類:
package adapter;
public class MP4Player implements AdvancedPlayer{
@Override
public void playFlv() {
}
@Override
public void playMP4() {
System.out.println("播放MP4文件");
}
}
MediaPlayer接口類:
package adapter;
public interface MediaPlayer {
public void play(String audioType, String fileName);
}
AudioPlayer實(shí)現(xiàn)類:
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)類:
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", "音樂.MP3");
}
}
-
適配器
+關(guān)注
關(guān)注
9文章
2001瀏覽量
68930 -
audio
+關(guān)注
關(guān)注
1文章
324瀏覽量
59749 -
AudioPlayer
+關(guān)注
關(guān)注
0文章
2瀏覽量
1485
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
適配器模式和代理模式的區(qū)別
適配器模式實(shí)現(xiàn)
引適配器模式的作用
適配器模式相關(guān)資料推薦
缺省適配器模式基本概念
對(duì)象適配器模式基本概念
什么是硬件適配器模式
適配器模式的本質(zhì)及分類
適配器模式和代理模式的區(qū)別

適配器模式的應(yīng)用

JavaScript設(shè)計(jì)模式之適配器模式

設(shè)計(jì)模式-適配器模式-以電壓適配器為例

什么是適配器模式?怎樣使用適配器模式進(jìn)行貨幣轉(zhuǎn)換?
什么是適配器模式

評(píng)論