
这种问题经常发生在生活中. 例如,中国的标准电压为220v,美国为110v. 如果要在美国使用中国电器mp4播放器java版,则需要有一个电压适配器作为电压转换的中间桥.
适配器模式就是这样的功能. 它是两个不兼容接口之间的桥梁,属于一种结合了两个接口功能的结构模式.
现在有一个具有两个子类的媒体播放器,一个播放器可以播放mp4格式的文件,另一个可以播放vlc格式的文件:

/**
* 播放器接口
* @author 樱桃肉丸子
*/
public interface AdvancedMediaPlayer {
void playVlc(String fileName);
void playMp4(String fileName);
}
/**
* MP4播放器
* @author 樱桃肉丸子
*/
public class Mp4Player implements AdvancedMediaPlayer {
@Override
public void playVlc(String fileName) {
//do nothing
}
@Override
public void playMp4(String fileName) {
System.out.println("mp4播放");
}
}
/**
* VLC播放器
* @author 樱桃肉丸子
*/
public class VlcPlayer implements AdvancedMediaPlayer {
@Override
public void playVlc(String fileName) {
System.out.println("VLC播放");
}
@Override
public void playMp4(String fileName) {
//do nothing
}
}

这时,我们现在可以播放mp4和vlc格式的文件,但是目前有一个更高的要求,即我们希望有一个可以同时播放mp4和vlc格式的文件的播放器mp4播放器java版,并且创建一个界面来表示更高级的播放器:
/**
* 更高级的播放器接口
* @author 樱桃肉丸子
*/
public interface MediaPlayer {
void play(String audioType, String fileName);
}
这时,我们需要创建一个适配器. 该适配器可以根据我们的需求自动转换为响应播放器.

/**
* 适配器实现类
* @author 樱桃肉丸子
*/
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);
}
}
}
这时,创建高级播放器的子类以实现播放功能. 该类可通过适配器实现灵活播放的效果.
/**
* 自动播放器
* @author 樱桃肉丸子
*/
public class AudioPlayer implements MediaPlayer {
MediaAdapter mediaAdapter;
@Override
public void play(String audioType, String fileName) {
//内置mp3播放器
if("mp3".equalsIgnoreCase(audioType)){
System.out.println("播放mp3文件");
//mp4或vlc格式文件
}else if("mp4".equalsIgnoreCase(audioType) || "vlc".equalsIgnoreCase(audioType)){
mediaAdapter = new MediaAdapter(audioType);
mediaAdapter.play(audioType, fileName);
}else{
System.out.println("系统暂不支持该类型文件的播放!!!");
}
}
}

最后看看效果:
/**
* 测试类
* @author 樱桃肉丸子
*/
public class AdapterPatternDemo {
public static void main(String[] args) {
//播放mp4文件
MediaPlayer mediaPlayer = new AudioPlayer();
mediaPlayer.play("mp4","a.mp3");
//播放vlc文件
mediaPlayer.play("vlc","b.vlc");
}
}
摘要:
在此示例中,mp4和vlc的两个接口不兼容,但是通过适配器中的灵活调用,新播放器同时具有两个功能. 从功能级别上,您可以直接在AutoPlayer中编写适配器的代码,但我认为最好单独封装此兼容代码.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-228352-1.html
美帝是纸考虎
还是蒋委员长说的对