设计模式-适配器模式示例|天天热头条

来源:腾讯云时间:2023-05-04 02:06:19


(相关资料图)

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

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

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

标签:

相关阅读

推荐阅读

浏览排行 iis7站长之家

南京发布房票安置政策 新购房屋将免征契税

南京市建委牵头印发 《南京市国有土地上住宅房屋征收房票安置暂行办法》(简称《暂行办法》),明确当购房成交价格不超过房票票面金额时,新 更多

2023-03-27 10:44:55
今日最新!2023年一级建造师《工程经济》历年真题精选0326_一级建造师

今日最新!2023年一级建造师《工程经济》历年真题

2023年一级建造师《工程经济》考试共80题,分为单选题和多选题。小编为您整理历年真题10道,附答案解析,供您考前自测提升!1、下列经济效果评更多

2023-03-27 10:12:28
600377股票 有色金属股票还没有涨停的有哪些 天天速读

600377股票 有色金属股票还没有涨停的有哪些 天

最近小编看到大家都在讨论600377股票 有色金属股票还没有涨停的有 更多

2023-03-27 09:58:50
预计今春沙尘过程偏多,沙尘天气是否呈现变多趋势?

预计今春沙尘过程偏多,沙尘天气是否呈现变多趋势

近日,今年以来强度最强、影响范围最广的沙尘天气侵袭多地,波及20个省(区、市),影响面积超过485万平方公里。本次过程强度达到强沙尘暴等级更多

2023-03-27 09:54:47
央行2月金融数据出炉!钱去哪了扬城住户存款增20.3%

央行2月金融数据出炉!钱去哪了扬城住户存款增20.3%

近日,央行2月金融数据出炉,记者从中国人民银行扬州中心支行获悉,2月末扬城住户存款余额5540 8亿元,银行存款产品备受青睐。为何市民偏爱银更多

2023-03-27 09:38:56
快资讯:3亩鱼池成“聚宝盆”每年40万尾小金鱼批量流向全国

快资讯:3亩鱼池成“聚宝盆”每年40万尾小金鱼批

陆兆生和他的金鱼池。司新利摄3亩多地的面积,被分割成56个鱼池,里面游动着一尾尾色彩艳丽的小金鱼,像一朵朵花儿在水中绽放,这就是景区城北更多

2023-03-27 09:49:50
小额贷款利息-我想问一下小额贷款一般利息多少

小额贷款利息-我想问一下小额贷款一般利息多少

最近这段时间总有小伙伴问小编小额贷款利息-我想问一下小额贷款一般 更多

2023-03-27 08:54:27
主板注册制第一股今日开启网上申购 有哪些变与不变?

主板注册制第一股今日开启网上申购 有哪些变与不

3月27日,沪市主板注册制第一股中重科技(603135)、深市主板注册制第一股登康口腔(001328)将进行新股申购。根据发行安排,首批沪深主板注册制新更多

2023-03-27 07:54:18
+ 点击查看更多精彩
今日最新!2023年一级建造师《工程经济》历年真题精选0326_一级建造师
    2023年一级建造师《工程经济》考试共80题,分为单选题和多选题。...
600377股票 有色金属股票还没有涨停的有哪些 天天速读
    最近小编看到大家都在讨论600377股票 有色金属股票还没有涨停的有
预计今春沙尘过程偏多,沙尘天气是否呈现变多趋势?
    近日,今年以来强度最强、影响范围最广的沙尘天气侵袭多地,波及2...
央行2月金融数据出炉!钱去哪了扬城住户存款增20.3%
    近日,央行2月金融数据出炉,记者从中国人民银行扬州中心支行获悉...
快资讯:3亩鱼池成“聚宝盆”每年40万尾小金鱼批量流向全国
    陆兆生和他的金鱼池。司新利摄3亩多地的面积,被分割成56个鱼池,...
小额贷款利息-我想问一下小额贷款一般利息多少
    最近这段时间总有小伙伴问小编小额贷款利息-我想问一下小额贷款一...