设计模式-适配器模式示例

时间:2023-05-04 09:34:38 来源: 腾讯云


(资料图片)

下面是一个完整的适配器模式的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将会创建一个适配器对象,通过适配器来实现播放。

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

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

标签:

精彩推送

故宫与西藏文物联展在京开幕

4月28日,嘉宾在北京故宫博物院参观梵华楼铜鎏金般若品佛像。新华社记者金良快摄当日,“祥开万象——故...

来源:2023.04.29

天天速看:公证遗嘱必须需要见证人吗

一、公证遗嘱必须需要见证人吗公证遗嘱不需要见证人。所谓公证遗嘱,是指遗嘱人生前订立并经公证机关公证的

来源:2023.04.29

青平:淄博再出圈,“诚”字是关键

近日山东淄博凭借特色烧烤火爆“出圈”。4月26日淄博市文化和旅游局发布《致广大游客朋友的一封信》,信...

来源:2023.04.29

全球聚焦:阿诺德谈新位置:很享受这样的角色,我喜欢拿球并展示出创造力

最近几场比赛,被克洛普调整位置的阿诺德表现出色,英格兰人在4场比赛中送出了5次助攻。在接受天空体育采访

来源:2023.04.29

环球热消息:​金雕捕狼,一爪封住狼嘴,一爪直插狼的脖子

金雕作为一种大型猛禽,具有很强的捕杀能力,特别是金雕有着又粗又长的角质利爪,从空中飞扑而下的强大力量

来源:2023.04.29

头条焦点:红烧凤爪的做法大全 红烧凤爪

今天来聊聊关于红烧凤爪的做法大全,红烧凤爪的文章,现在就为大家来简单介绍下红烧凤爪的做法大全,红烧凤

来源:2023.04.29

动态焦点:伟岸的意思_伟岸

1、【词语】:伟岸【注音】:wěiàn【释义】:①魁梧高大:身躯伟岸。2、②卓异:资质伟岸。3、③容貌气度非凡

来源:2023.04.29

供销大集:2022年年报净利润发生亏损

供销大集:2022年年报净利润发生亏损

来源:2023.04.29

天玑9200+曝光:安兔兔+GeekBench双冠王 5月10日发布 或由iQOO Neo8 Pro首发-天天头条

4月28日下午,知名数码博主@数码闲聊站曝出了联发科最新旗舰芯片天玑9200+的Geekbenchv6跑分,其单核成绩为

来源:2023.04.28

新闻快讯

X 关闭

X 关闭

新闻快讯