23种设计模式 - 适配器模式

server/2025/2/22 2:02:33/

模式定义

适配器模式(Adapter Pattern)是一种结构型设计模式,用于解决接口不兼容问题。它通过将一个类的接口转换为客户端期望的接口,使原本因接口不匹配而无法协同工作的类能够协同工作。适配器模式分为类适配器(通过继承实现)和对象适配器(通过组合实现)两种类型。


模式结构

目标接口(Target):客户端期望的接口(如数控系统的传感器接口)。
适配者(Adaptee):需要被适配的现有类(如第三方传感器)。
适配器(Adapter):实现目标接口,并持有适配者的实例,负责接口转换。


适用场景

集成遗留系统或第三方组件时接口不兼容。
统一多个类接口以简化客户端调用(如数控系统中不同厂商的传感器)。


C++示例(数控系统场景)

场景说明:
数控系统需要读取传感器数据,但旧系统使用OldSensor接口,新引入的第三方传感器NewSensor接口不同,需通过适配器统一接口。

#include 
#include // 目标接口:数控系统期望的传感器接口
class Sensor {
public:virtual ~Sensor() = default;virtual std::string getData() = 0;  // 统一的数据获取接口
};// 旧传感器(直接兼容目标接口)
class OldSensor : public Sensor {
public:std::string getData() override {return "旧传感器数据: 转速=1500 RPM";}
};// 适配者:第三方新传感器(接口不兼容)
class NewSensor {
public:std::string fetchData() {return "新传感器数据: 温度=80°C, 振动=0.05mm";}
};// 对象适配器(组合方式)
class NewSensorAdapter : public Sensor {
private:NewSensor* newSensor;  // 持有适配者实例
public:NewSensorAdapter(NewSensor* sensor) : newSensor(sensor) {}std::string getData() override {// 调用适配者的方法并转换格式return "[适配后] " + newSensor->fetchData();}
};// 客户端(数控系统)
int main() {// 使用旧传感器Sensor* oldSensor = new OldSensor();std::cout << oldSensor->getData() << std::endl;// 使用适配后的新传感器NewSensor newSensor;Sensor* adaptedSensor = new NewSensorAdapter(&newSensor);std::cout << adaptedSensor->getData() << std::endl;delete oldSensor;delete adaptedSensor;return 0;
}

代码说明
目标接口:Sensor定义了数控系统所需的getData()方法。
适配者:NewSensor提供实际功能但接口不兼容(fetchData())。
适配器:NewSensorAdapter继承Sensor并组合NewSensor,在getData()中调用fetchData()并封装结果。

输出结果:

旧传感器数据: 转速=1500 RPM
[适配后] 新传感器数据: 温度=80°C, 振动=0.05mm

模式优势

复用性:无需修改适配者代码即可集成新功能。
灵活性:支持动态切换适配器类型(如不同厂商传感器)。


http://www.ppmy.cn/server/169420.html

相关文章

el与data的2种写法

el的2种写法 1.el: #root, <div id"root"> </div><script type"text/javascript">const x new Vue({el: #root,data: {name: 伏尔加}})</script> 2. x.$mount(#root) <div id"root"> </div><script …

Python 自然语言处理(NLP)和文本挖掘的常规操作过程

Python 自然语言处理&#xff08;NLP&#xff09;和文本挖掘 自然语言处理&#xff08;NLP&#xff09;和文本挖掘是数据科学中的重要领域&#xff0c;涉及对文本数据的分析和处理。Python 提供了丰富的库和工具&#xff0c;用于执行各种 NLP 和文本挖掘任务。以下是一些常见的…

超全Deepseek资料包,deepseek下载安装部署提示词及本地部署指南介绍

该资料包涵盖了DeepSeek模型的下载、安装、部署以及本地运行的详细指南&#xff0c;适合希望在本地环境中高效运行DeepSeek模型的用户。资料包不仅包括基础的安装步骤&#xff0c;还提供了68G多套独立部署视频教程教程&#xff0c;针对不同硬件配置的模型选择建议&#xff0c;以…

在项目中调用本地Deepseek(接入本地Deepseek)

前言 之前发表的文章已经讲了如何本地部署Deepseek模型&#xff0c;并且如何给Deepseek模型投喂数据、搭建本地知识库&#xff0c;但大部分人不知道怎么应用&#xff0c;让自己的项目接入AI模型。 文末有彩蛋哦&#xff01;&#xff01;&#xff01; 要接入本地部署的deepsee…

加强地面塌陷隐患防治,构筑城市地质安全防线

随着我国城市现代化建设进程的加快&#xff0c;城市基础建设和房地产开发呈现出高速发展的态势。然而&#xff0c;在这一繁荣景象的背后&#xff0c;城市地面塌陷问题却日益凸显&#xff0c;成为影响城市地质环境安全的重要因素之一。与传统的地质灾害相比&#xff0c;城市地面…

2025.2.19——1500

2025.2.19——1500 A 1500 B 1500 C 1500 D 1500 ------------------------------------------------ 思维/图论位运算/思维数学/思维构造/思维 A 存在路径即在一个连通块。加上必须加的边&#xff0c;删去必须要删去的边。并查集维护查询&#xff0c;考虑一下删边和加边…

如何通过Windows环境远程控制MusicGPT在线生成高质量AI音乐

文章目录 前言1. 本地部署2. 使用方法介绍3. 内网穿透工具下载安装4. 配置公网地址5. 配置固定公网地址 前言 在这个快节奏的时代&#xff0c;音乐不仅是心灵的慰藉&#xff0c;更是创意的源泉。试想一下&#xff0c;在忙碌的工作间隙或悠闲的周末午后&#xff0c;只需轻敲几行…

Redis数据库面试——数据结构类型知识

大家好&#xff0c;这里是Good Note&#xff0c;关注 公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍Redis 提供的5种基本数据结构类型和4种特殊类型&#xff0c;除此之外&#xff0c;还有8种底层数据结构&#xff0c;每种结构类型有其特点和适用场…