适配器模式的概念
| 适配器模式(Adapter)是将一个类(对象)的接口(方法或属性)转化成客户希望的另外一个接口(方法或属性) |
| |
| 适配器模式使得原本由于接口不兼容而不能一起工作的那些类(对象)可以一些工作。 |
| |
| 适配器又称包装器(wrapper)。 |
| |
| 核心就是 适配 做 兼容性 处理 |
适配器模式示例代码
| |
| class Cellular{ |
| charge(){ |
| return 'typec耳孔' |
| } |
| } |
| |
| |
| class Adaptor{ |
| constructor(){ |
| this.Cellular = new Cellular() |
| } |
| charge(){ |
| let v = this.Cellular.charge() |
| return `${v}=>普通耳机圆孔` |
| } |
| } |
| |
| |
| class Headset{ |
| constructor(){ |
| this.Adaptor = new Adaptor() |
| } |
| use(){ |
| console.log(this.Adaptor.charge()) |
| } |
| } |
| |
| let headset = new Headset() |
| headset.use() |
适配器模式的场景
| 1、在平时我们开发中,我们可能会遇见这样的场景:当我们试图调用某个模块或者对象的接口时,却发现这个接口的格式不符合我们的需求。这时有两种解决办法:第一种是修改原来的接口实现,但如果原来的代码很复杂,例如是一个库或框架,更改原代码就显得很不现实了。所以这时就需要使用今天所讲的第二种办法:创建一个适配器,将原接口转换为客户希望的另一个接口,客户只需要使用适配器即可。 |
| |
| 2、比如我们需要请求后端数据,但我们默认请求的方法是GET请求,但后端用的是post请求, 还有后端返回的数据格式是字符串的,但我们需要的是对象类型的数据,因此前端就需要做兼容处理 |
| |
| 1、对请求参数的适配 |
| |
| 2、对后端返回的数据进行适配 |
| |
| function ajax(options){ |
| let defaultOptions = { |
| methods:'GET', |
| dataType:'json' |
| } |
| |
| for(let attr in options){ |
| |
| defaultOptions[attr] = options[attr] || defaultOptions[attr] |
| } |
| |
| } |
| function transform(str){ |
| return JSON.parse(str) |
| } |
| ajax({ |
| url:'http://www.baidu.com', |
| methods:'post', |
| success(str){ |
| |
| |
| let result = transform(str) |
| } |
| }) |
适配器模式的总结其一
| 小结 |
| |
| 不改变原有接口的情况下,统一接口、统一入参、统一出参、统一规则,符合开发封闭原则。 |
| |
| 使用场景 |
| |
| 拥抱变化,兼容代码。 |
适配器模式的总结其二
| 优点 |
| |
| 1、可以让任何两个没有关联的类一起运行。 |
| |
| 2、提高了类的复用。 |
| |
| 3、适配对象,适配库,适配数据 |
| |
| 缺点 |
| |
| 1、额外对象的创建,非直接调用,存在一定的开销( 且不像代理模式在某些功能点上可实现性能优化 ) |
| |
| 2、如果没必要使用适配器模式的话,可以考虑重构,如果使用的话,尽量把文档完善 |
| |
| 场景 |
| |
| 1、整合第三方SDK |
| |
| 2、封装旧接口 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了