「软件设计模式杂谈🤔」和后端吵架失败了,于是乎我写了个适配器模式

Hi! 这里是JustHappy ,作为一个前端开发者,更是软件工程师,软件设计模式咱必须要接触吧,所以来吧!一起来聊聊!我们从适配器模式开始吧!

什么玩意儿是"适配器模式"?

我们先来查查百科吧!(以下内容引用自维基百科)

设计模式中,适配器模式 (英语:adapter pattern)有时候也称包装样式或者包装(英语:wrapper)。将一个的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类能在一起工作,做法是将类自己的接口包裹在一个已存在的类中。

主要有两类吧:

  • 🧩 类适配器模式(基于继承)
  • 🧩 对象适配器模式(基于组合)

是不是有些不讲人话,我们来拆解一下吧:

试想一个场景!🤯

又是一个蛋疼的下午,我们要进行前后端联调,出现什么问题呢?后端同学给的接口实在是丑陋,但是咱这"前端切图仔",长期处于鄙视链的底端,愣是没有在 "吵架环节" 说服后端修改接口,怎么办呢?那我们自己来把这个接口变得不那么丑陋吧

: 这里后端提供的接口不符合我们的预期,所以我们要处理....

怎么办呢?

假设后端传递过来的接口长下面这样

js 复制代码
{
  "user_name": "Simon",
  "user_age": 25,
  "user_status": 1
}

可是你页面中已经写好了对应的逻辑,需要的数据结构应该是下面这样,尴尬了,字段名也不对,类型还对不上。

js 复制代码
IUser = {
  name: string
  age: number
  isActive: boolean
}

怎么办?总有一个人需要做出让步吧...... 既然我们吵架吵输了

那就使用适配器模式吧!

话不多说,我们在这实现一个最简单的适配器

js 复制代码
// 后端返回的数据
const backendData = {
  user_name: "Simon",
  user_age: 25,
  user_status: 1
}

// 我们期望使用的数据结构是这样子的:
/*
{
  name: "Simon",
  age: 25,
  isActive: true
}
*/

// 适配器函数:把后端数据"翻译"成我们喜欢的格式
function adaptUser(data) {
  return {
    name: data.user_name,
    age: data.user_age,
    isActive: data.user_status === 1
  }
}

// 使用适配器
const user = adaptUser(backendData)

console.log(user)
// 输出:{ name: "Simon", age: 25, isActive: true }

🧬 类适配器 vs 对象适配器:到底差在哪?

简单点讲:

  • 类适配器 通过继承实现,适合在强类型语言里搞搞(比如 Java、C#)。
  • 对象适配器 用的是组合(组合优于继承听说过吧~),更适合咱 JS/TS 世界。

所以我们前端用得最多的,其实就是对象适配器了。写个函数转换一下,就能干翻一堆奇怪数据结构。

做个简单的总结吧

✨ 总结一下

适配器模式就像我们生活中的万能插头,左手接老式接口,右手接新式需求,居中搞桥梁。在实际项目中,特别是做前后端联调时,简直不要太常见!

📌 你可以用它来:

  • 接老旧系统的接口
  • 封装第三方库的输出
  • 或者在多人协作时保护自己的"数据整洁癖"
相关推荐
To_OC4 小时前
写了三遍 Todo List,我终于搞懂了 React 父子组件到底怎么通信
前端·javascript·react.js
勇往直前plus5 小时前
Vue3(篇一) 核心概念——响应式模板语法与组件基础
前端·javascript·vue.js
咩咩啃树皮5 小时前
第43篇:Vue3计算属性(computed)完全精讲——缓存机制、依赖计算、业务最优解
前端·vue.js·缓存
choumin6 小时前
创建型模式——工厂方法模式
c++·设计模式·工厂方法模式·创建型模式
用户938515635076 小时前
从零搭建 AI 日记助手:用 Milvus 向量数据库 + RAG 让机器读懂你的每一天
javascript·人工智能·全栈
徐小夕7 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
a1117768 小时前
坦克大战3D Three.js 3D (开源项目)
开发语言·javascript·3d
kyriewen9 小时前
别再乱用useEffect了——你写的10个里有8个不该存在
前端·javascript·react.js
Ivanqhz9 小时前
Rust &‘static str浅析
java·前端·javascript·rust
IT_陈寒9 小时前
SpringBoot这个分页坑,我踩了三天才爬出来
前端·人工智能·后端