(资料图片仅供参考)
适配器模式是一种结构型设计模式,它用于将一个类的接口转换成另一个接口,以便于两个不兼容的接口能够一起工作。适配器模式有时也被称为包装器模式。
适配器模式包含以下角色:
目标接口(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上海车展开幕首日,全新林肯航海家正式首发亮相并宣布上市,新...
1、在存在道德风险的情况下,如何保证拥有信息优势的一方(称为代理...
近山东的淄博可谓是火出了天际,面对八方来客,淄博做足了准备。当...
5月1日,骄阳似火。临近瓮安县珠藏镇丰岩村乌江双池渡口,清凉之意...
1、纳米数高的真丝织物。2、2、一种多根经纬线组成、纬线加强捻的厚...
1、孙继周。2、现任河南省许昌市生态环境局四级调研员。3、工作分工...
钧达股份近日披露投资者关系活动记录表显示,截止目前,公司拥有上...
证券时报网讯,中金策略团队5月3日表示,节后A股有望相比全球市场显...
5月3日20时至5月4日20时,安徽西部、湖北东部等地可能发生山洪灾害...
智通财经APP讯,华美乐乐(08429)发布截至2023年3月31日止3个月业绩...
鲁西化工(000830)5月3日晚间公告,5月1日全资子公司双氧水公司的双...
富瀚微(300613)5月3日晚间公告,公司正在筹划发行股份及支付现金购...
共话中国经济新机遇|海外人士这样谈中国之“力”:开放引力篇,杨云,...
1、糖蒜口感酸甜嫩爽,让人很开胃。2、主要原料有大蒜、食盐、红糖...
欢迎观看本篇文章,小升来为大家解答以上问题。qq,空间登录方法登...
天涯知名度提高了之后,大量新用户涌入,稀释原有社区氛围,让很多...
“港车北上”30年,10万亿市场拉开序幕,香港,广东,港澳,珠海,深圳,...
IT之家5月3日消息,根据路透社报道,苹果公司已经向英国伦敦法院提...
大坂直美在6比7、0比3落后时因背伤退赛,她的对手卡内皮成功晋级下...
1、可能有几个原因:2、1无物流信息:物流公司没有扫描此单录入系统...
5月2日晚间,编剧史航通过其个人微博发文,再回应涉嫌性骚扰指控。...
怎么安慰心情不好的人简短,怎么安慰心情不好的人这个很多人还不知...
此前利物浦4-3绝杀热刺的比赛中,利物浦前锋若塔抬脚过高踢到斯基普...
数据来源:交通运输部等图为研学旅行指导师韩天雷(右一)带领学生...
1、配债就是上市公司的一种融资行为。2、如果某公司要发行债券,你...
1、为切实推进我县工业化进程,县人民政府研究制定了2005年工业化发...
天气预报5月3日(星期三)阴天有小到中雨偏东风4级,14℃~22℃五一...