设计模式-适配器模式示例
2023-05-05 13:28:55 腾讯云


(资料图片仅供参考)

下面是一个完整的适配器模式的Java代码示例:

// 目标接口public interface MediaPlayer {   public void play(String audioType, String fileName);}// 被适配对象public class Mp4Player {   public void playMp4(String fileName) {      System.out.println("Playing mp4 file. Name: "+ fileName);    }}// 被适配对象public class VlcPlayer {   public void playVlc(String fileName) {      System.out.println("Playing vlc file. Name: "+ fileName);    }}// 适配器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 class AudioPlayer implements MediaPlayer {   MediaAdapter mediaAdapter;    @Override   public void play(String audioType, String fileName) {              //播放 mp3 音乐文件的内置支持      if(audioType.equalsIgnoreCase("mp3")){         System.out.println("Playing mp3 file. Name: " + fileName);               }       //mediaAdapter 提供了播放其他文件格式的支持      else if(audioType.equalsIgnoreCase("vlc")          || audioType.equalsIgnoreCase("mp4")){         mediaAdapter = new MediaAdapter(audioType);         mediaAdapter.play(audioType, fileName);      }      else{         System.out.println("Invalid media. " + audioType + " format not supported");      }   }   }// 测试代码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");   }}

输出结果如下:

Playing mp3 file. Name: beyond the horizon.mp3Playing mp4 file. Name: alone.mp4Playing vlc file. Name: far far away.vlcInvalid media. avi format not supported

在这个示例中,适配器模式将一个不支持的音频格式转换成了支持的格式,并通过适配器的方式来实现播放。具体而言,AudioPlayer类作为客户端调用 MediaPlayer接口的 play方法。如果需要播放的音频格式是不支持的,AudioPlayer将会创建一个适配器对象,并通过该适配器对象来播放音频。

在适配器模式的示例中,有以下几个角色:

目标接口:MediaPlayer接口定义了 play方法,用于播放音频文件。被适配对象:VlcPlayerMp4Player类表示两种不兼容的音频格式,不能直接播放。适配器:MediaAdapter类实现了 MediaPlayer接口,同时包含一个被适配对象的引用。MediaAdapter类将不支持的音频格式转换成支持的格式,并通过被适配对象来实现播放。客户端:AudioPlayer类作为客户端,使用 MediaPlayer接口来播放音频文件。如果需要播放的音频格式不支持,AudioPlayer将会创建一个适配器对象,通过适配器来实现播放。

适配器模式的优点在于它可以将两个不兼容的接口进行连接,从而实现代码的复用和扩展性的提高。如果有新的音频格式需要支持,只需要实现一个新的适配器即可。

另外,适配器模式可以提高代码的可读性和可维护性。它可以将不相关的代码放在不同的类中,从而使代码更易于理解和维护。

热门推荐

文章排行

  1. 2023-05-05设计模式-适配器模式示例
  2. 2023-05-05A股异动丨三七互娱继续刷新阶段高价 Q1业绩超预期 Q2新品周期到来-天天新要闻
  3. 2023-05-05快报:国际观察|中东“和解潮”为解决叙利亚问题带来新机遇
  4. 2023-05-05赵继伟:与郭艾伦私下交流会少一些 打球风格不同&玩的东西也不同
  5. 2023-05-05世界即时:今日时讯:名宿C罗应回到皇马结束职业生涯 沙特有意申办世界杯和奥运会签下梅西是计划的一部分
  6. 2023-05-05醴陵市环卫中心: 全力护航千年瓷都烟花秀、天下醴陵炒粉节
  7. 2023-05-05沃森生物国际总部落地广州南沙 总建面17万平米
  8. 2023-05-05环球今热点:古代中原地区指哪里地方_古代中原地区指哪里
  9. 2023-05-05美国6岁男孩夜晚躺在家中遭流弹击中身亡 系当地今年来第三位遇害少年|观天下
  10. 2023-05-05天天新动态:湖里五缘湾片区拟建一所体艺特色高中
  11. 2023-05-05山东能监办:推动新能源接网工程回购! 观察
  12. 2023-05-05XBB.1.16会引发新一轮疫情吗?多国发现新毒株,全球评估风险低|今日视点
  13. 2023-05-05维权动态|北京西城“243”工作机制保护农民工权益 最新消息
  14. 2023-05-05视焦点讯!电力大合同范本(热门45篇)
  15. 2023-05-05今年一季度海南省城镇新增就业4.66万人 全球热资讯
  16. 2023-05-05高塔逆位学业_高塔逆位 世界新动态
  17. 2023-05-05香港海关查获70块走私NVIDIA显卡 首发于2014年
  18. 2023-05-05复出后球队局面急转直下,恩比德真是不太适合这轮系列赛?-每日信息
  19. 2023-05-04加拿大税务局与工会达成暂定协议 全国大罢工暂告结束
  20. 2023-05-04突发!上海二手房超40万套,恐慌抛售引发踩踏?