下面是一个完整的适配器模式的Java代码示例:
代码语言:javascript复制// 目标接口
public interface MediaPlayer {
public void play(String audioType, String fileName);
}
// 被适配对象
public class Mp4Player {
public void playMp4(String fileName) {
System.out.println("Playing mp4 file. Name: " fileName);
}
}
// 被适配对象
public class VlcPlayer {
public void playVlc(String fileName) {
System.out.println("Playing vlc file. Name: " fileName);
}
}
// 适配器
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);
}
}
}
// 客户端
public class AudioPlayer implements MediaPlayer {
MediaAdapter mediaAdapter;
@Override
public void play(String audioType, String fileName) {
//播放 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");
}
}
}
// 测试代码
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");
}
}
输出结果如下:
代码语言:javascript复制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
在这个示例中,适配器模式将一个不支持的音频格式转换成了支持的格式,并通过适配器的方式来实现播放。具体而言,AudioPlayer
类作为客户端调用 MediaPlayer
接口的 play
方法。如果需要播放的音频格式是不支持的,AudioPlayer
将会创建一个适配器对象,并通过该适配器对象来播放音频。
在适配器模式的示例中,有以下几个角色:
- 目标接口:
MediaPlayer
接口定义了play
方法,用于播放音频文件。 - 被适配对象:
VlcPlayer
和Mp4Player
类表示两种不兼容的音频格式,不能直接播放。 - 适配器:
MediaAdapter
类实现了MediaPlayer
接口,同时包含一个被适配对象的引用。MediaAdapter
类将不支持的音频格式转换成支持的格式,并通过被适配对象来实现播放。 - 客户端:
AudioPlayer
类作为客户端,使用MediaPlayer
接口来播放音频文件。如果需要播放的音频格式不支持,AudioPlayer
将会创建一个适配器对象,通过适配器来实现播放。
适配器模式的优点在于它可以将两个不兼容的接口进行连接,从而实现代码的复用和扩展性的提高。如果有新的音频格式需要支持,只需要实现一个新的适配器即可。
另外,适配器模式可以提高代码的可读性和可维护性。它可以将不相关的代码放在不同的类中,从而使代码更易于理解和维护。