适配器模式
1 适配器模式基本介绍#
1)适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性,
让原本因接口不匹配不能一起工作的两个类可以协同工作
2)适配器模式属于结构性模式
3)主要分为3类:类适配器,对象适配器,接口适配器
2 工作原理#
1、适配器模式:将一个类的接口转换成另一种接口,让原本不兼容的类可以兼容
2、从用户的角度看不到被适配者,是解耦的
3、用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法
4、用户收到反馈结果,感觉是和目标接口交互
3 类适配器模式#
1、类适配器模式简介#
基本介绍: Adapter类,通过继承被适配的类,实现适配接口,
2、适配器模式实例#
将220v的电压转化为5v输出!
代码实现
//被适配者: public class Voltage220V { public int output220V(){ int src =220; System.out.println("电压="+src+"伏"); return src; } } //适配接口 public interface IVoltage5V { public int transfer5V(); } //适配器 public class VoltageAdapter extends Voltage220V implements IVoltage5V{ @Override public int transfer5V() { int srcV = output220V(); int dstV =srcV/44; return dstV; } } //使用适配器的类,就将适配器聚合到该类中 public class Phone { public void charging(IVoltage5V iVoltage5V){ if(iVoltage5V.transfer5V()==5){ System.out.println("电压为5v~ 可以充电!"); }else{ System.out.println("电压不等于5v~ 不可以充电!"); } } } //测试 public class Client { public static void main(String[] args) { System.out.println("类适配器模式~~~~~~~~~~"); Phone phone =new Phone(); phone.charging(new VoltageAdapter()); } }
#
4 对象适配器模式#
1、对象适配器模式基本介绍#
基本思路和类的适配器模式相同,只是适配器类,不再继承被适配的类,而是持有被适配类的实例
2、对象适配器应用实例#
将220v的电压转化为5v输出!
适配器的代码有稍微的区别:
public class VoltageAdapter implements IVoltage5V { private Voltage220V voltage220V; public VoltageAdapter(Voltage220V voltage220V) { this.voltage220V = voltage220V; } @Override public int transfer5V() { int dstV =0; if(voltage220V!=null){ int srcV = voltage220V.output220V(); dstV =srcV/44; } return dstV; } }
5 接口适配器模式#
1、接口适配器模式介绍#
适用于一个接口不想使用其所有方法的情况
当不需要全部实现接口提供的方法时,可以设计一个抽象类实现接口,并未该接口中的每个方法提供一个默认实现(空方法),那么该抽象类的子类可以有选择的覆盖父类的某些方法来实现需求
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?