日期:2023-05-05 10:40:48 来源:腾讯云
【资料图】
适配器模式是一种结构型设计模式,它用于将一个类的接口转换成另一个接口,以便于两个不兼容的接口能够一起工作。适配器模式有时也被称为包装器模式。
适配器模式包含以下角色:
目标接口(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
方法来播放该格式的音频文件。
使用适配器模式的好处是可以将两个不兼容的接口进行连接,从而实现代码的复用和扩展性的提高。如果有新的音频格式需要支持,只需要实现一个新的适配器即可。
标签:
下一篇: 最后一页
设计模式-适配器模式
【全球播资讯】哈尔滨现不明飞行物 专家分析来了
中国银行涨5.33%,股价创历史新高-全球微动态
育拔尖人才,强基础研究根基
【全球速看料】【双生花 番外】不动的明王 其二十
柏诚股份:5月4日融资买入831.31万元,融资融券余额1.03亿元 全球微头条
热文:笔记本电脑显示屏不亮怎么办_笔记本电脑显示屏不亮
当前看点!起酥油是什么油回民能吃吗_起酥油是什么油
我国海拔最高特高压变电站主体开工建设 全球热点
OpenAI在2022年的亏损翻番至5.4亿美元 开发和人工成本高昂 看热讯
又是黑哨?CBA浙江1分险胜,2大名嘴痛批裁判,姚明你真该管管了_滚动
5月4日基金净值:信澳周期动力混合A最新净值1.4482,涨0.19%
读卡器读不出内存卡提示格式化了_读卡器读不出内存卡提示格式化_当前速递
上海将推进“有组织的科研”提升科技攻关效率
秦州区开展成品油双随机抽查工作
当前信息:假期余额告急?这些人延长放假!
今天打开个税APP,我直接人麻了!|世界热议
嘉应制药股东户数下降1.53%,户均持股15.61万元|全球快报
单个企业年度最高补助500万元!山东提出建立完善科技型企业研发投入补助机制 环球热讯
凯旺科技:截止2023年4月28日,公司股东人数为9822人(户)
世界最新:汉仪股份:AIGC技术暂时仅应用于公司字体产品设计
每日快看:TVB实力男星凭新剧出圈!与林峯同期出道,演尽反派角色惹人憎
招商伊敦将在合肥建计容面积10.3万平方米的保租房租赁社区
比亚迪宋Pro DM-i冠军版官图 外观造型变化较大
仅剩3到6个月!全球碳酸饮料可能面临断市?原因是…