我们有一个 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