适配器模式测试类代码 public class VideoAdapterDemo { public static void main(String[] args) { // 原有的某酷播放器接口 MediaPlayer mediaPlayer = new MouKuMediaPlayer(); mediaPlayer.play("边水往事"); mediaPlayer.play("唐朝诡事录之西行"); System.out.println("****************************************************************"); // 使用适配器模式 MediaPlayer mediaPlayer2 = new MyMediaPlayerAdapter(); mediaPlayer2.play("天龙八部"); mediaPlayer2.play("唐朝诡事录之西行"); mediaPlayer2.play("边水往事"); mediaPlayer2.play("警察故事"); } }
这段代码展示了如何通过适配器模式来实现不同多媒体播放器的兼容性。
它首先使用一个原有的媒体播放器(MouKuMediaPlayer
)播放了两个视频资源。随后,通过适配器(MyMediaPlayerAdapter
)创建了一个新的媒体播放器实例,成功播放了多个视频。这种方法使得不同播放器之间的交互变得简单,重点在于如何将不兼容的接口转变为可以互操作的接口,是设计模式中非常重要的一个实现。
目标接口
public interface MediaPlayer { void play(String videoName); }
需要适配的类
public class MouKuMediaPlayer implements MediaPlayer,VideoPlayer { private List<String> playlist = new ArrayList<>(); public MouKuMediaPlayer() { playlist.add("天龙八部"); playlist.add("边水往事"); playlist.add("三国演义"); } @Override public void play(String videoName) { if(findVideo(videoName)){ System.out.println("使用某酷视频播放器播放" + videoName ); }else{ System.out.println("没有找到" + videoName + "的播放列表"); } } @Override public boolean findVideo(String videoName) { return playlist.contains(videoName); } }
public class MouXunMediaPlayer implements MediaPlayer,VideoPlayer { private List<String> playlist = new ArrayList<>(); public MouXunMediaPlayer() { playlist.add("射雕英雄传"); playlist.add("倚天屠龙记"); } @Override public void play(String videoName) { if(findVideo(videoName)){ System.out.println("使用某讯视频播放器播放" + videoName ); }else{ System.out.println("没有找到" + videoName + "的播放列表"); } } @Override public boolean findVideo(String videoName) { return playlist.contains(videoName); } }
public class MouYiMediaPlayer implements MediaPlayer,VideoPlayer { private List<String> playlist = new ArrayList<>(); public MouYiMediaPlayer() { playlist.add("笑傲江湖"); playlist.add("唐朝诡事录之西行"); } @Override public void play(String videoName) { if(findVideo(videoName)){ System.out.println("使用某艺视频播放器播放" + videoName ); }else{ System.out.println("没有找到" + videoName + "的播放列表"); } } @Override public boolean findVideo(String videoName) { return playlist.contains(videoName); } }
适配器类代码
public class MyMediaPlayerAdapter implements MediaPlayer{ // 持有需要适配的播放器实例 private MouKuMediaPlayer mouKuMediaPlayer; private MouXunMediaPlayer mouXunMediaPlayer; private MouYiMediaPlayer mouYiMediaPlayer; public MyMediaPlayerAdapter(){ mouKuMediaPlayer = new MouKuMediaPlayer(); mouXunMediaPlayer = new MouXunMediaPlayer(); mouYiMediaPlayer = new MouYiMediaPlayer(); } @Override public void play(String videoName) { if(mouKuMediaPlayer.findVideo(videoName)){ mouKuMediaPlayer.play(videoName); } else if (mouXunMediaPlayer.findVideo(videoName)) { mouXunMediaPlayer.play(videoName); }else if (mouYiMediaPlayer.findVideo(videoName)) { mouYiMediaPlayer.play(videoName); }else{ System.out.println("没有找到可以播放 "+videoName+" 所对应的播放器"); } } }
MyMediaPlayerAdapter
类的主要功能是充当不同媒体播放器之间的适配器。它封装了多个播放器(如 MouKuMediaPlayer
、MouXunMediaPlayer
和 MouYiMediaPlayer
),并允许用户通过统一的接口(MediaPlayer
)来播放视频。具体而言,当调用 play
方法时,适配器会自动检测哪个播放器可以处理给定的视频,并进行相应的播放操作。这种设计模式使得不同播放器之间的切换和管理变得更加方便,从而提高了代码的灵活性和可维护性。
其他接口
该接口和适配器模式的结构无关,只为模拟情景 public interface VideoPlayer { boolean findVideo(String videoName); }