java设计模式之适配器模式
适配器模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。
对于这个模式,有一个经常被拿来解释它的例子,就是 USB 转接头充当适配器,把两种不兼容的接口,通过转接变得可以一起工作。
适配器模式有两种实现方式:类适配器和对象适配器。其中,类适配器使用继承关系来实现,对象适配器使用组合关系来实现。
假如我们这里有一个旧的Api,可能是之前的团队开发的,现在的客户端需要的是基于Target的接口
旧Api
/** * 旧的不兼容的接口 */ public class Api { void fa() { System.out.println("I am Api.fa()"); } }
需要的基于Target的接口
/** * 目标要求的接口 */ public interface Target { void f1(); }
旧API和新的客户端需求是不兼容的,这个时候我们就需要通过一个适配器来适配。
首先我们基于继承的方式来实现适配器
/** * 基于继承的适配器 */ public class ApiAdapter extends Api implements Target{ @Override public void f1() { System.out.println("I am ApiAdapter.f1()"); fa(); } } /** * 基于组合的适配器 */ public class ApiAdapter2 implements Target{ private Api api; public ApiAdapter2(Api api) { this.api = api; } @Override public void f1() { System.out.println("I am ApiAdapter2.f1()"); api.fa(); } }
客户端调用
public class Client { public static void main(String[] args) { ApiAdapter apiAdapter = new ApiAdapter(); apiAdapter.f1(); ApiAdapter2 apiAdapter2 = new ApiAdapter2(new Api()); apiAdapter2.f1(); } }
输出
I am ApiAdapter.f1()
I am Api.fa()
I am ApiAdapter2.f1()
I am Api.fa()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗