我们有一个 MediaPlayer 接口和一个实现了 MediaPlayer 接口的实体类 Mp3Player。默认情况下,Mp3Player 可以播放 mp3 格式的音频文件。
我们还有另一个接口 AdvancedMediaPlayer 和实现了 AdvancedMediaPlayer 接口的实体类。该类可以播放 mp4 格式的文件,也可以增加其他格式。
我们想要让 Mp3Player 播放其他格式的音频文件。为了实现这个功能,我们需要创建一个实现了 MediaPlayer接口的适配器类 MediaAdapter,并使用 AdvancedMediaPlayer 对象来播放所需的格式。
Mp3Player 使用适配器类 MediaAdapter 传递所需的音频类型,不需要知道能播放所需格式音频的实际类。AdapterPatternDemo,我们的演示类使用 Mp3Player 类来播放各种格式。
1、MP3接口
package Adapter;
/*
* MP3接口
*/
public interface MediaPlayer {
public void play(String audioType, String fileName);
}
2、MP3实现类
package Adapter;
/*
* Mp3实现类
*/
public class Mp3Player implements MediaPlayer {
//引入媒婆:适配类
MediaAdapter mediaAdapter;
@Override
public void play(String audioType, String fileName) {
if(audioType.equalsIgnoreCase("mp3")){
System.out.println("Playing mp3 file. Name: "+ fileName);
}
else if(audioType.equalsIgnoreCase("mp4")){
//若要让Mp3能播放Mp4,找适配器扩展Mp4
mediaAdapter = new MediaAdapter(audioType);
mediaAdapter.play(audioType, fileName);
}
else{
System.out.println("其他");
}
}
}
3、Mp4接口
package Adapter;
/*
* MP4接口
*/
public interface AdvancedMediaPlayer {
public void playMp4(String fileName);
//其他
}
(可以定义更多方法,比如:Mp5)
4、Mp4实现类
package Adapter;
/*
* Mp4实现类
*/
public class Mp4Player implements AdvancedMediaPlayer{
@Override
public void playMp4(String fileName) {
System.out.println("Playing mp4 file. Name: "+ fileName);
}
}
(增加Mp5实现类)
5、适配类
package Adapter;
/*
* 适配类:媒婆作用
*/
public class MediaAdapter implements MediaPlayer{
//引入Mp4接口
AdvancedMediaPlayer advancedMediaPlayer;
/*
* 构造器:判断传进来的是Mp4还是其他,来选择new的对象
*/
public MediaAdapter(String audioType){
if(audioType.equalsIgnoreCase("mp4")){
advancedMediaPlayer = new Mp4Player();
}else{
System.out.println("Error");
}
}
@Override
public void play(String audioType, String fileName) {
if(audioType.equalsIgnoreCase("mp4")){
advancedMediaPlayer.playMp4(fileName);
}else{
System.out.println("其他");
}
}
}
(构造器里判断:如果是Mp5,new Mp5的实现类)
(相应的,重写的play方法里也进行增加一个判断)
6、测试类
package Adapter;
/*
* 测试类
*/
public class AdapterPatternDemo {
public static void main(String[] args) {
Mp3Player mp3Player = new Mp3Player();
mp3Player.play("mp3", "alone.mp3");
mp3Player.play("mp4", "lonely.mp4");
}
}
结果:
Playing mp3 file. Name: alone.mp3
Playing mp4 file. Name: lonely.mp4