适配器模式实例 java
时间: 2024-05-19 12:08:30 浏览: 27
适配器模式是一种结构型设计模式,它的主要作用是在新接口和老接口之间进行适配,通过将一个类的接口转换成客户期望的另一个接口,让原本不兼容的接口可以合作无间。在Java设计模式编程中,适配器模式的使用非常广泛,下面是一个适配器模式的实例:
假设我们有一个音频播放器AudioPlayer,它可以播放MP3格式的音频文件。现在我们需要让它能够播放其他格式的音频文件,比如VLC和MP4格式的文件。但是AudioPlayer只支持MP3格式,我们需要一个适配器来将其他格式的文件转换成MP3格式,然后再交给AudioPlayer来播放。
我们可以定义一个接口MediaPlayer,它有一个play方法,然后定义一个实现了MediaPlayer接口的类AudioPlayer,它可以播放MP3格式的音频文件。接着我们定义一个适配器类MediaAdapter,它实现了MediaPlayer接口,并且可以播放VLC和MP4格式的音频文件。在MediaAdapter中,我们可以使用VLCPlayer和MP4Player来播放对应格式的音频文件,然后将它们转换成MP3格式,最后交给AudioPlayer来播放。
下面是适配器模式的Java代码实现:
```
// 定义MediaPlayer接口
public interface MediaPlayer {
public void play(String audioType, String fileName);
}
// 定义实现了MediaPlayer接口的类AudioPlayer
public class AudioPlayer implements MediaPlayer {
@Override
public void play(String audioType, String fileName) {
if (audioType.equalsIgnoreCase("mp3")) {
System.out.println("Playing mp3 file. Name: " + fileName);
}
}
}
// 定义适配器类MediaAdapter
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 interface AdvancedMediaPlayer {
public void playVlc(String fileName);
public void playMp4(String fileName);
}
// 定义实现了AdvancedMediaPlayer接口的类VlcPlayer
public class VlcPlayer implements AdvancedMediaPlayer{
@Override
public void playVlc(String fileName) {
System.out.println("Playing vlc file. Name: "+ fileName);
}
@Override
public void playMp4(String fileName) {
// 什么也不做
}
}
// 定义实现了AdvancedMediaPlayer接口的类Mp4Player
public class Mp4Player implements AdvancedMediaPlayer{
@Override
public void playVlc(String fileName) {
// 什么也不做
}
@Override
public void playMp4(String fileName) {
System.out.println("Playing mp4 file. Name: "+ fileName);
}
}
// 定义演示类AdapterPatternDemo
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");
}
}
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)