适配器模式一般是在我们要把”现有的对象“应用到新的环境中时使用,通过编写一个adapter类,把原有的类应用到新的类中,而不必修改原有类,也不必重写已有类。
如下图所示,原有一个advancedplayer接口类,可以播放flv和mp4格式的视频文件。现在新建了一个mediaplayer接口类,使之可以播放mp3、flv和mp4格式的文件。
因为已有advancedplayer接口类实现了播放flv和mp4格式的文件,现在只需要编写一个播放mp3格式文件的audioplayer实现类和一个adapter实现类,在adapter类中使用advancedplayer类的对象,使之可以播放flv和mp4类型的文件。
advancedplayer接口类:
package adapter;public interface advancedplayer { public void playflv(); public void playmp4();}flvplayer实现类:
package adapter;public class flvplayer implements advancedplayer { @override public void playflv() { system.out.println(播放flv格式文件); } @override public void playmp4() { }}mp4player实现类:
package adapter;public class mp4player implements advancedplayer{ @override public void playflv() { } @override public void playmp4() { system.out.println(播放mp4文件); }}mediaplayer接口类:
package adapter;public interface mediaplayer { public void play(string audiotype, string filename);}audioplayer实现类:
package adapter;public class audioplayer implements mediaplayer { adapter adapter; @override public void play(string audiotype, string filename) { if(audiotype.equals(mp3)) { system.out.println(播放mp3:+filename); }else if(audiotype.equals(flv)||audiotype.equals(mp4)) { adapter=new adapter(audiotype); adapter.play(audiotype, filename); }else { system.out.println(文件格式未知); } }}adapter适配器实现类:
package adapter;public class adapter implements mediaplayer{ advancedplayer advancedplayer; public adapter(string audiotype) { if(audiotype.equals(flv)) { advancedplayer =new flvplayer(); }else if(audiotype.equals(mp4)) { advancedplayer = new mp4player(); } } @override public void play(string audiotype,string filename) { if(audiotype.equals(flv)){ advancedplayer.playflv(); }else if(audiotype.equals(mp4)) { advancedplayer.playmp4(); } }}主函数调用方式:
package main;import adapter.*;public class adapterpattern { public static void main(string[] args) { audioplayer audioplayer=new audioplayer(); audioplayer.play(flv, 视频.flv); audioplayer.play(mp4, 视频.mp4); audioplayer.play(mp3, 音乐.mp3); }}
煲汤炖菜离不开人?卡萨帝鉴赏家燃气灶发布:自控火、不溢锅
如何避免电动车电池的自放电现象
运动相机,我首选大疆新品 DJI Action 2
德国电信推出了每月不限流量的5G套餐价格约为656元
pcb板的铜箔厚度怎么选择
适配器模式设计
白光LED驱动器包括过热保护
目标检测YOLO系列算法的发展过程
后疫情时代智慧医院建设更应强调人、财、物的精细化管理
电感元件的作用_电感元件的特性是什么
运营商的5G套餐资费是多少?到底值不值购买5G手机呢?
OC门电路和OD门电路原理
如何让区块链技术为社会奉献
减少PCB设计上电磁干扰(EMI)的最佳方法之一
百度AI开发者大会,看百度AI是如何修成正果
C语言作为高级编程语言中的一门“低级”语言为什么要学习?
红外探测器选型指南:让您轻松选择最佳方案
鸿利智汇Mini LED显示屏获CDIA年度最佳显示模组组件产品奖
VC供应瓶颈将成为LFP电池市场进一步增长的障碍
英特尔描绘融入AI的未来折叠屏PC