关于适配器模式我所知道的

简介: 关于适配器模式我所知道的

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

关键词:结构型 适配器模式 adapter 事后设计

解决什么问题?

image.png


适配器模式是一种结构型设计模式。

使用目的是解决两个组件间的接口不兼容的问题。通常在已有程序中使用, 让相互不兼容的类能很好地合作。 其实是用来弥补系统设计缺陷的一种设计。(亡羊补牢

典型的应用场景是:后端返回的数据结构和表单组件需要的数据结构不一致。

遇到这种情况,我们有两种处理方法:

  1. 找后端修改返回字段和结构
  2. 获取数据之后前端做一层适配,自行处理。

如果结论是后者,这时候我们就可以使用双向适配器来兼容两者。


如何实现


/**
 * Adaptee => Target 报错
 * Adaptee => Adapter => Target 成功
 */
class Target {
  public request(): string {
    return '目标行为';
  }
}
class Adaptee {
  public specificRequest(): string {
    return '为行殊特eetpadA';
  }
}
class Adapter extends Target {
  private adaptee: Adaptee;
  constructor(adaptee: Adaptee) {
    super();
    this.adaptee = adaptee;
  }
  public request(): string {
    const result = this.adaptee.specificRequest().split('').reverse().join('');
    return `适配器转换${result}`;
  }
}

测试代码

function clientCode(target: Target) {
  console.log(target.request());
}
// 直接执行 target
const target = new Target();
clientCode(target);
// 直接执行 adaptee
const adaptee = new Adaptee();
console.log(`Adaptee: ${adaptee.specificRequest()}`);
//通过是配置执行 adaptee
const adapter = new Adapter(adaptee);
clientCode(adapter);

与其他设计模式的区别

代理模式 桥接模式 装饰器模式 适配器模式
事后设计 事前设计 事后设计 事后设计
不改变原始类接口,提供跟原始类相同的接口 写代码之前就要把接口部分和实现部分分离,从而让它们可以较为容易、也相对独立地加以改变。 不改变原始类接口,提供跟原始类相同的接口, 提供跟原始类不同的接口。
为原始类定义一个代理类,主要目的是控制访问,而非加强功能。 加强原始类功能,支持多个装饰器的嵌套使用。


目录
相关文章
|
8月前
|
人工智能 自然语言处理 程序员
AI引爆全美失业潮?通义灵码助你开发路上不孤单!
达沃斯调查显示,超4成老板计划2025-2030年因AI自动化削减员工。首当其冲的是软件工程行业,Anthropic CEO称AI可能在12个月内接管几乎所有代码编写工作。面对这一变革,程序员应如何应对?通义灵码作为基于通义大模型的AI研发辅助工具,提供代码生成、智能问答等功能,助力开发者适应AI原生研发新范式。现可直接参与项目,完成未实现功能!
|
SQL 存储 分布式计算
ODPS技术架构深度剖析与实战指南——从零开始掌握阿里巴巴大数据处理平台的核心要义与应用技巧
【10月更文挑战第9天】ODPS是阿里巴巴推出的大数据处理平台,支持海量数据的存储与计算,适用于数据仓库、数据挖掘等场景。其核心组件涵盖数据存储、计算引擎、任务调度、资源管理和用户界面,确保数据处理的稳定、安全与高效。通过创建项目、上传数据、编写SQL或MapReduce程序,用户可轻松完成复杂的数据处理任务。示例展示了如何使用ODPS SQL查询每个用户的最早登录时间。
1574 1
|
存储 监控 固态存储
在高并发环境下,如何优化 WAL 的写入性能?
在高并发环境下,如何优化 WAL 的写入性能?
213 2
|
SQL 存储 API
Flink实践:通过Flink SQL进行SFTP文件的读写操作
虽然 Apache Flink 与 SFTP 之间的直接交互存在一定的限制,但通过一些创造性的方法和技术,我们仍然可以有效地实现对 SFTP 文件的读写操作。这既展现了 Flink 在处理复杂数据场景中的强大能力,也体现了软件工程中常见的问题解决思路——即通过现有工具和一定的间接方法来克服技术障碍。通过这种方式,Flink SQL 成为了处理各种数据源,包括 SFTP 文件,在内的强大工具。
410 15
|
11月前
|
Java Spring 容器
【SpringFramework】Spring IoC-基于注解的实现
本文主要记录基于Spring注解实现IoC容器和DI相关知识。
174 21
|
机器学习/深度学习 自然语言处理 算法
3大核心技术,免费开源的智能合同审查分析软件的技术介绍
智能法律文档分析系统基于BERT、GPT等模型,实现高精度的实体识别和关系抽取,准确率分别达95%和90%以上。系统支持跨文档关联分析和实时处理,响应时间小于1秒,显著提升文档处理效率。核心算法包括深度学习模型、关系抽取技术和多层次数据处理能力,适用于复杂的法律文书分析。
720 0
3大核心技术,免费开源的智能合同审查分析软件的技术介绍
|
12月前
|
弹性计算 缓存 数据挖掘
阿里云服务器经济型e和通用算力型u1实例区别及选择参考
在阿里云目前的活动中,经济型e和通用算力型u1实例是两个比较热门的云服务器实例规格,收费标准相对其他计算型、通用型和内存型实例来说要更低一些,经济型e实例ECS云服务器2核2G3M带宽新购和续费都是99元1年,通用算力型u1实例2核4G5M带宽新购和续费都只要199元1年、4核8G云服务器955.58元1年。有的新手用户并不清楚他们之间的区别及如何选择,本文将介绍阿里云服务器中的经济型e实例和通用算力型u1实例的特点、区别以及新手选择参考。
FFmpeg中结构释放小函数
本文介绍了FFmpeg中用于释放不同结构体内存的泛化变参模板函数CleanUp,以及如何特化该模板以释放AVFormatContext、AVCodecContext、AVPacket、AVFrame和uint8_t*类型的内存,并提供了一个测试文件来演示这些函数的使用。
142 3
|
缓存 负载均衡 应用服务中间件
解决Nginx常见问题的技术指南
解决Nginx常见问题的技术指南
845 0
|
消息中间件 分布式计算 DataWorks
DataWorks产品使用合集之如何使用Python和阿里云SDK读取OSS中的文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。