适配器模式是一种结构型设计模式,它允许将不兼容的接口转换为客户端代码所期望的接口。以下是一个简单的示例,说明如何使用适配器模式来实现一个音频播放器,支持不同类型的音频文件。
假设我们要设计一个音频播放器,它可以播放多种格式的音频文件,例如MP3、WAV和OGG等。此时,我们可以使用适配器模式来实现该音频播放器,具体实现如下:
- 定义目标接口:首先,我们需要定义一个
AudioPlayer
接口,作为所有音频播放器类的基类,它包含了播放音频文件的方法。
public interface AudioPlayer {
void play(String type, String filename);
}
- 实现具体类:然后,我们可以创建具体的MP3、WAV和OGG播放器类,它们分别实现了
AudioPlayer
接口,并播放相应格式的音频文件。
public class Mp3Player implements AudioPlayer {
@Override
public void play(String type, String filename) {
if (type.equals("mp3")) {
System.out.println("Playing mp3 file: " + filename);
} else {
System.out.println("Invalid media type.");
}
}
}
public class WavPlayer implements AudioPlayer {
@Override
public void play(String type, String filename) {
if (type.equals("wav")) {
System.out.println("Playing wav file: " + filename);
} else {
System.out.println("Invalid media type.");
}
}
}
public class OggPlayer implements AudioPlayer {
@Override
public void play(String type, String filename) {
if (type.equals("ogg")) {
System.out.println("Playing ogg file: " + filename);
} else {
System.out.println("Invalid media type.");
}
}
}
- 实现适配器类:现在,我们需要创建一个适配器类,用于将不兼容的接口转换为
AudioPlayer
接口。在这个例子中,我们创建了一个MediaAdapter
类,它实现了AudioPlayer
接口,并根据文件类型调用相应的播放器。
public class MediaAdapter implements AudioPlayer {
private Mp3Player mp3Player;
private WavPlayer wavPlayer;
private OggPlayer oggPlayer;
public MediaAdapter() {
mp3Player = new Mp3Player();
wavPlayer = new WavPlayer();
oggPlayer = new OggPlayer();
}
@Override
public void play(String type, String filename) {
if (type.equals("mp3")) {
mp3Player.play(type, filename);
} else if (type.equals("wav")) {
wavPlayer.play(type, filename);
} else if (type.equals("ogg")) {
oggPlayer.play(type, filename);
} else {
System.out.println("Invalid media type.");
}
}
}
- 使用适配器:现在,我们可以创建音频播放器,例如:
AudioPlayer audioPlayer = new MediaAdapter();
audioPlayer.play("mp3", "song.mp3");
audioPlayer.play("wav", "sound.wav");
audioPlayer.play("ogg", "music.ogg");
audioPlayer.play("avi", "movie.avi");
这里我们创建了一个MediaAdapter
对象,并使用其实现的play()
方法来播放音频文件。输出结果为:
Playing mp3 file: song.mp3
Playing wav file: sound.wav
Playing ogg file: music.ogg
Invalid media type.
这样就实现了一个简单的适配器模式,使得我们可以在不改变原有类代码的情况下,通过适配器将不兼容的接口转换为客户端代码所期望的接口,从而增强了系统的可扩展性和灵活性。