网站首页 > java教程 正文
PS:创作不易,感谢阅读,希望对读者有所帮助,喜欢的话可以点赞、收藏、关注,作者会持续更新 Java 生态圈常见知识。黑色加粗为重点关注内容!
- 基本描述
- 将一个类的接口转换成用户希望的另一个接口
- 目的
- 是使得原本由于接口不兼容,而不能一起工作的那些类,可以一起工作。
- 主要解决
- 在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的
- 如何解决
- 继承或依赖(推荐)
- 优点
- 可以让任何两个没有关联的类一起运行
- 提高了类的复用和灵活性
- 增加了类的透明度
- 缺点
- 过多地使用适配器,会让系统非常零乱
- 比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。
- 因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
- 实现
- 适配器继承或依赖已有的对象,并实现想要的目标接口。
- 使用场景
- 有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。
- 角色
- Target(目标抽象类):当前系统业务所期待的接口,它可以是抽象类或接口
- Adaptee(适配者类):适配者即被适配的角色,它是被访问和适配的现存组件库中的组件接口。
- Adapter(适配器类):它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者
- 适配器模式类型
- 类适配器模式: 适配器实现目标类接口,并继承适配者类
- 对象适配器模式:适配器实现目标类接口,并继承适配者实现类,然后目标实现类再引入适配器实现类
- 接口适配器模式:适配者实现目标类接口,引入适配者接口,并在适配器内部实例化适配者对象,然后目标实现类再引入适配器实现类
代码示例
- 创建适配者的接口和实现类
public interface AdvancedMediaPlayer {
public void playMp4(String fileName);
}
public class Mp4Player implements AdvancedMediaPlayer{
@Override
public void playMp4(String fileName) {
System.out.println("Playing mp4 file. Name: "+ fileName);
}
}
- 创建目标接口
public interface MediaPlayer {
public void play(String audioType, String fileName);
}
- 创建适配器类,实现了目标接口,按目标接口的格式访问适配者
public class MediaAdapter implements MediaPlayer {
AdvancedMediaPlayer advancedMusicPlayer;
public MediaAdapter(String audioType){
advancedMusicPlayer = new Mp4Player();
}
@Override
public void play(String audioType, String fileName) {
advancedMusicPlayer.playMp4(fileName);
}
}
- 创建目标的实现类
public class AudioPlayer implements MediaPlayer {
/* 引入适配器 */
MediaAdapter mediaAdapter;
@Override
public void play(String audioType, String fileName) {
// 目标类的原方法
if(audioType.equalsIgnoreCase("mp3")){
System.out.println("Playing mp3 file. Name: "+ fileName);
}
// 目标类的适配方法
else if(audioType.equalsIgnoreCase("mp4")){
mediaAdapter = new MediaAdapter(audioType);
mediaAdapter.play(audioType, fileName);
}
else{
System.out.println("Invalid media. "+
audioType + " format not supported");
}
}
}
- 上一篇: 一文彻底搞明白适配器模式
- 下一篇: java与设计模式-适配器模式
猜你喜欢
- 2024-11-26 面试官:请说下适配器模式、代理模式和装饰者模式的不同
- 2024-11-26 适配器模式:类适配器 (Class Adapter)
- 2024-11-26 简说设计模式之适配器模式
- 2024-11-26 设计模式系列-结构型-适配器模式
- 2024-11-26 Java 适配器模式在保险出单业务中的应用
- 2024-11-26 设计模式——适配器模式
- 2024-11-26 设计模式-适配器模式,安卓中应用场景介绍!!
- 2024-11-26 万能转接头之适配器模式
- 2024-11-26 适配器模式的设计,你get到了吗?
- 2024-11-26 无处不在的适配器模式
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)