电子说
适配器模式一般是在我们要把”现有的对象“应用到新的环境中时使用,通过编写一个Adapter类,把原有的类应用到新的类中,而不必修改原有类,也不必重写已有类。
如下图所示,原有一个AdvancedPlayer接口类,可以播放flv和MP4格式的视频文件。现在新建了一个MediaPlayer接口类,使之可以播放MP3、flv和MP4格式的文件。
因为已有AdvancedPlayer接口类实现了播放flv和MP4格式的文件,现在只需要编写一个播放MP3格式文件的AudioPlayer实现类和一个Adapter实现类,在Adapter类中使用AdvancedPlayer类的对象,使之可以播放flv和MP4类型的文件。
AdvancedPlayer接口类:
package adapter;
public interface AdvancedPlayer {
public void playFlv();
public void playMP4();
}
FlvPlayer实现类:
package adapter;
public class FlvPlayer implements AdvancedPlayer {
@Override
public void playFlv() {
System.out.println("播放Flv格式文件");
}
@Override
public void playMP4() {
}
}
MP4Player实现类:
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实现类:
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适配器实现类:
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();
}
}
}
主函数调用方式:
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");
}
}
全部0条评论
快来发表一下你的评论吧 !