玄武模板网站制作品牌,网站官网域名要多少钱,公司做网站推广百度和阿里巴巴,衡水网站制作公司哪家专业文章目录 1、适配器模式2、举例 1、适配器模式
适配器模式Adapter Pattern#xff0c;是做为两个不兼容的接口之间的桥梁目的是将一个类的接口转换成客户希望的另外一个接口适配器模式可以使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
最后#xff0c;适配器… 文章目录 1、适配器模式2、举例 1、适配器模式
适配器模式Adapter Pattern是做为两个不兼容的接口之间的桥梁目的是将一个类的接口转换成客户希望的另外一个接口适配器模式可以使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
最后适配器是对已经开发完的系统的一种改造思路新设计尽量一次设计好或者时间充裕就重构。适配器太多会使得系统很乱看着在调A接口底下已被适配到了B接口。
2、举例
背景有两个接口分别为媒体播放器播放音频、高级媒体播放器播放视频。创建适配器将二者的功能融合。两个接口
/*** 高级媒体播放器* 可播放视频*/
public interface AdvanceMediaPlayer {public void playVlc(String fileName);public void playMp4(String fileName);
}
/*** 媒体播放器接口* 可播放音频*/
public interface MediaPlayer {public void play(String audioType, String fileName);
}
写高级媒体播放器的实现类
public class Mp4Player implements AdvanceMediaPlayer{Overridepublic void playVlc(String fileName) {当前格式为mp4格式对vlc的播放不做具体实现}Overridepublic void playMp4(String fileName) {System.out.println(播放Mp4文件 fileName);}
}public class VlcPlayer implements AdvanceMediaPlayer{Overridepublic void playVlc(String fileName) {System.out.println(播放vlc文件 fileName);}Overridepublic void playMp4(String fileName) {//当前格式为vlc格式对mp4的播放不做具体实现}
}创建适配器注入待合并的那个接口的对象。自定义有参构造方法并对待合并接口对象完成初始化赋值
public class MediaPlayerAdapter implements MediaPlayer {private AdvanceMediaPlayer advanceMediaPlayer;/*** 定义个有参的构造方法形参为自定义的String类型* param audioType 媒体文件类型*/public MediaPlayerAdapter(String audioType) {if (vlc.equalsIgnoreCase(audioType)) {advanceMediaPlayer new VlcPlayer();} else if (mp4.equalsIgnoreCase(audioType)) {advanceMediaPlayer new Mp4Player();}}Overridepublic void play(String audioType, String fileName) {//判断当前媒体的格式是mp4还是vlcif (vlc.equalsIgnoreCase(audioType)) {//播放vlc文件advanceMediaPlayer.playVlc(fileName);} else if (mp4.equalsIgnoreCase(audioType)) {//播放mp4文件advanceMediaPlayer.playMp4(fileName);}}
}到此适配器拥有了待合并接口所有实现类的功能。写另一个接口媒体播放器的实现类里面注入适配器对象如果是音频则实现类正常完成如果是视频则通过适配器完成
public class AudioPlayer implements MediaPlayer {private MediaPlayerAdapter adapter;Overridepublic void play(String audioType, String fileName) {//音频文件比如mp3if (mp3.equalsIgnoreCase(audioType)) {System.out.println(播放mp3文件 fileName);} else if (vlc.equalsIgnoreCase(audioType) || mp4.equalsIgnoreCase(audioType)) {//视频文件高级媒体文件adapter new MediaPlayerAdapter(audioType);adapter.play(audioType, fileName); //到此完成了两个接口的适配不管是音频还是视频我这儿都能播放}}
}
到此完成合并测试类
public class Test {public static void main(String[] args) {AudioPlayer audioPlayer new AudioPlayer();audioPlayer.play(mp3, 啦啦啦.mp3);audioPlayer.play(vlc, 喜羊羊.vlc);audioPlayer.play(mp4, 视频.mp4);}
}