设计模式-适配器模式_世界速读
(相关资料图)
适配器模式是一种结构型设计模式,它用于将一个类的接口转换成另一个接口,以便于两个不兼容的接口能够一起工作。适配器模式有时也被称为包装器模式。
适配器模式包含以下角色:
目标接口(Target Interface):定义客户端所需的接口,这是客户端代码调用的接口。适配器(Adapter):适配器是一个类,它实现目标接口并且包含一个对被适配对象的引用。被适配对象(Adaptee):被适配对象是一个已经存在的对象,它的接口与目标接口不兼容。客户端(Client):客户端通过目标接口调用适配器的方法来与被适配对象进行交互。下面是一个适配器模式的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 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"); } } }
这个例子中,客户端调用了 MediaPlayer
接口的 play
方法。如果传入的文件类型是 mp3
,则直接在 AudioPlayer
类中播放,否则就通过适配器模式实现播放其他格式的音频文件。当需要播放不支持的音频格式时,AudioPlayer
类会创建一个 MediaAdapter
对象,该对象可以将不支持的音频格式转换成支持的格式,然后调用 MediaPlayer
接口的 play
方法来播放该格式的音频文件。
使用适配器模式的好处是可以将两个不兼容的接口进行连接,从而实现代码的复用和扩展性的提高。如果有新的音频格式需要支持,只需要实现一个新的适配器即可。
-
设计模式-适配器模式_世界速读
腾讯云 2023-05-04
-
美最新锐航母福特号离港部署
中财网 2023-05-04
-
新业态释放消费潜力 全球热头条
经济日报 2023-05-04
-
百事通!【回村的年轻人①】90后“竹编姑娘”归乡“新”编
四川新闻网 2023-05-04
-
世界快报:《蜘蛛侠英雄归来2》曝新画面,小虫黑色战衣登场,大反派确认
指尖悲凉生 2023-05-04
-
世界实时:换装V6发动机 英菲尼迪全新一代QX80最新消息曝光
乐选爱车 2023-05-04
-
美学者:美联储加息抑制通胀的举措 或使美经济进一步恶化 世界快资讯
海外网 2023-05-04
-
【全球时快讯】致敬劳动者!三代电力工程师赓续“劳动精神”
华夏经纬网 2023-05-04
-
每日快讯!“五一档”,不少影院票房创“历史最佳” 扬州电影总票房超800万元
扬州日报-扬州网 2023-05-04
-
当前视讯!《圣斗士》真人电影:日本上映3天票房仅5000万日元,恐难回本!
马志辉 2023-05-04
-
设计模式-适配器模式_世界速读
腾讯云 2023-05-04
-
美最新锐航母福特号离港部署
中财网 2023-05-04
-
新业态释放消费潜力 全球热头条
经济日报 2023-05-04
-
百事通!【回村的年轻人①】90后“竹编姑娘”归乡“新”编
四川新闻网 2023-05-04
-
世界快报:《蜘蛛侠英雄归来2》曝新画面,小虫黑色战衣登场,大反派确认
指尖悲凉生 2023-05-04
-
世界实时:换装V6发动机 英菲尼迪全新一代QX80最新消息曝光
乐选爱车 2023-05-04
-
美学者:美联储加息抑制通胀的举措 或使美经济进一步恶化 世界快资讯
海外网 2023-05-04
-
【全球时快讯】致敬劳动者!三代电力工程师赓续“劳动精神”
华夏经纬网 2023-05-04
-
每日快讯!“五一档”,不少影院票房创“历史最佳” 扬州电影总票房超800万元
扬州日报-扬州网 2023-05-04
-
当前视讯!《圣斗士》真人电影:日本上映3天票房仅5000万日元,恐难回本!
马志辉 2023-05-04
-
三部门:医联体建设不得变相取消中医医院 今日热门
互联网 2023-05-04
-
天天观速讯丨小鸡宝宝考考你欲穷千里目更上一层楼描写的是哪个省份的风景
互联网 2023-05-04
-
弗拉霍维奇:我太想念进球了,希望能继续取得进球-每日热点
直播吧 2023-05-04
-
播报:懒柿子的制作方法视频_懒柿子
互联网 2023-05-04
-
周杰伦拿过几次金曲奖最佳男歌手_周杰伦拿过几次金曲奖
互联网 2023-05-04
-
全球消息!冀晋豫八县区建立环境资源司法保护跨区域协作机制
中国青年网 2023-05-04
-
陈向东:我创业中犯的所有错误,都是关于人的 热点聚焦
中国企业家杂志 2023-05-03
-
强对流蓝色预警!9省区市将有8-10级雷暴大风或冰雹
中国天气网 2023-05-03
-
聚焦:男子在西湖捞手机日入约一万详细内容
互联网 2023-05-03
-
“五一”假期北京市属公园接待游客295.37万人次
中国新闻网 2023-05-03
-
俄罗斯电信公司已完全转向使用本国企业生产的服务器-世界视讯
互联网 2023-05-03
-
讯息:好奇害死猫是什么定律 好奇害死猫到底是什么意思又什么出处的嘛
城市网 2023-05-03
-
合肥市景区室外游乐设施暂停运行
金台资讯 2023-05-03
-
青岛港湾职业技术学院宿舍怎么样 环境
壹壹高考网 2023-05-03
-
黑魂3元素碎片位置有几个(黑魂3元素碎片位置有几个)
互联网 2023-05-03
-
世界即时看!比利时半导体研究机构IMEC拟在日本设研究小组
亚汇网 2023-05-03
-
天天滚动:96名!浙江交工成功协助同胞撤离苏丹
中国水运网 2023-05-03
-
摩托罗拉折叠屏新品Razr 40 Ultra将采用骁龙 8+ Gen 1 芯片
ITBEAR 2023-05-03
-
恒生预测今年港经济增长达4%
观点网 2023-05-03
-
见多识广|MVP和总冠军的等号,为何越来越难以划上?
正经篮球社 2023-05-03