前言:适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。比如已经有A和B,在不改动A和B的情况下,使其中一方能获得另一方的支持。
JAVA语言版原型模式
创建为媒体播放器和更高级的媒体播放器创建接口:
public interface MediaPlayer {
void play(String audioType,String fileName);
}
public interface AdvancedMediaPlayer {
void playVlc(String fileName);
void playMp4(String fileName);
}
创建更高级的媒体播放器的实现类:
public class VlcPlayer implements AdvancedMediaPlayer {
@Override
public void playVlc(String fileName) {
System.out.println("正在播放的 vlc 文件名:" + fileName);
}
@Override
public void playMp4(String fileName) {
}
}
public class Mp4Player implements AdvancedMediaPlayer {
@Override
public void playVlc(String fileName) {
}
@Override
public void playMp4(String fileName) {
System.out.println("正在播放的 mp4 文件名:" + fileName);
}
}
创建实现MediaPlayer 接口的适配器类:
public class MediaAdapter implements MediaPlayer {
AdvancedMediaPlayer advancedMediaPlayer;
public MediaAdapter(String audioType) {
if (audioType.equalsIgnoreCase("vlc")) {
advancedMediaPlayer = new VlcPlayer();
} else if (audioType.equalsIgnoreCase("mp4")) {
advancedMediaPlayer = new Mp4Player();
}
}
@Override
public void play(String audioType, String fileName) {
if (audioType.equalsIgnoreCase("vlc")) {
advancedMediaPlayer.playVlc(fileName);
} else if (audioType.equalsIgnoreCase("mp4")) {
advancedMediaPlayer.playMp4(fileName);
}
}
}
创建实现了 MediaPlayer 接口的实体类:
public class AudioPlayer implements MediaPlayer {
MediaAdapter mediaAdapter;
@Override
public void play(String audioType, String fileName) {
if (audioType.equalsIgnoreCase("mp3")) {
System.out.println("正在播放的 mp3 文件名:" + fileName);
} else if (audioType.equalsIgnoreCase("vlc")
|| audioType.equalsIgnoreCase("mp4")) {
mediaAdapter = new MediaAdapter(audioType);
mediaAdapter.play(audioType, fileName);
} else {
System.out.println(audioType + " 类型的文件不支持");
}
}
}
使用 AudioPlayer 来播放不同类型的音频格式:
public class AdapterPatternDemo {
public static void main(String[] args) {
AudioPlayer audioPlayer = new AudioPlayer();
audioPlayer.play("mp3", "如果没有如果");
audioPlayer.play("mp4", "黑名单");
audioPlayer.play("avi", "小鬼当家");
}
}
输出结果:
正在播放的 mp3 文件名:如果没有如果
正在播放的 mp4 文件名:黑名单
avi 类型的文件不支持