设计模式-适配器模式_精彩看点
2023-05-04 01:28:39来源:腾讯云
(相关资料图)
适配器模式是一种结构型设计模式,它用于将一个类的接口转换成另一个接口,以便于两个不兼容的接口能够一起工作。适配器模式有时也被称为包装器模式。
适配器模式包含以下角色:
目标接口(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-03 21:42:13
- 青海省久治县发布雷电黄色预警 每日热议
- 世界滚动:致敬劳动者!三代电力工程师赓续“劳动精神”
- 焦点快看:《漫长的季节》大结局,盘点剧中耐人寻味又感人温暖的细节
- 上完初中没考上高中上什么学校最好
- 2022年辽宁物理高考真题_当前快播
- 环球消息!第24届冬奥会金银纪念币价格表(2023年05月03日)
- 当前时讯:澳门“五一”假期旅游市场繁荣 旅游业前景可观
- 巩固房地产市场企稳回升势头
- 苏丹冲突殃及关键材料 可乐、雪碧供应要吃紧?-当前看点
- 如果说你要离开我是什么歌_爱之初体验歌曲介绍 当前热议
- 【Alan Becker柴同人】全系列拼接+补充:第四集 病毒侵略的缘起(中)
- 六类网线水晶头接法与五类区别(六类网线水晶头接法)
- 世界资讯:对明星的普男普女嘲讽,合理吗?
- 汉服女孩李凯迪,想创作出个“又美又酷”的敦煌
- 当前短讯!硬朗的拼音_硬朗
- 今年五一这些景区人最多,你去打卡了吗?
- 虽然巴萨大胜赫塔菲但也发生了不太和谐的一幕