一天一个设计模式---适配器模式

概念

适配器模式是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。它允许不兼容的接口之间进行协同工作,使得原本由于接口不匹配而无法合作的类能够一起工作。

具体内容

适配器模式主要包括以下几个要素:

  1. 目标接口(Target Interface): 客户端期望的接口,适配器模式的目标是使被适配者(Adaptee)的接口能够符合目标接口。
  2. 适配器(Adapter): 实现目标接口,并包含一个对被适配者的引用。适配器负责将被适配者的接口转换成目标接口,从而使得客户端可以与被适配者协同工作。
  3. 被适配者(Adaptee): 需要被适配的接口。被适配者是原本无法与目标接口直接协同工作的类。

类结构图

在这里插入图片描述

适用场景

  • 现有系统与新系统的集成: 当引入新组件或系统时,为了与现有系统协同工作,可以使用适配器模式来统一接口。
  • 第三方库的使用: 当使用第三方库或组件时,其接口可能不符合当前系统的需求,通过适配器可以使其与系统其他部分协同工作。
  • 接口版本升级: 当接口发生变化,为了保持向后兼容性,可以使用适配器模式适配新旧接口之间的差异。

实现

// 目标接口
// 目标接口
class Target {request() {console.log("Target's request");}
}// 被适配者
class Adaptee {specificRequest() {console.log("Adaptee's specific request");}
}// 适配器
class Adapter extends Target {constructor(adaptee) {super();this.adaptee = adaptee;}request() {this.adaptee.specificRequest();}
}// 客户端代码
const adaptee = new Adaptee();
const adapter = new Adapter(adaptee);adapter.request(); // 调用适配器的request,实际上执行了被适配者的specificRequest

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/613836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C 语言结构体和枚举完全指南:成员访问、字符串操作、枚举基础

访问结构体成员 要访问结构体的成员,请使用点语法 (.): // 创建名为 myStructure 的结构体 struct MyStructure {int myNum;char myLetter; };int main() {// 创建名为 s1 的 myStructure 的结构体变量struct MyStructure s1;// 为 s1 的成员分配值s1.myNum 13;s…

Miniconda Python解释器 Conda 包管理器 Pytorch

Miniconda Miniconda 是一个轻量级的 Anaconda 版本,它是一个用于管理 Python 环境和包的开源工具。Anaconda 是一个数据科学和机器学习的开发环境,它包含了许多常用的 Python 包和工具。 与 Anaconda 相比,Miniconda 的安装包更小&#xf…

VBA中类的解读及应用第八讲:实现定时器功能的自定义类事件

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。 类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入&#xff0…

Java中输入和输出处理(三)二进制篇

叮咚!加油!马上学完 读写二进制文件Data DataInputStream类 FilFeInputStream的子类 与FileInputStream类结合使用读取二进制文件 DataOutputStream类 FileOutputStream的子类 与FileOutputStream类结合使用写二进制文件 读写二进制代码 package 面…

vue实现-年、月、日、时、分、秒、星期?

一、文章引导 #mermaid-svg-nP4oT3Y4d6oaxUsg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-nP4oT3Y4d6oaxUsg .error-icon{fill:#552222;}#mermaid-svg-nP4oT3Y4d6oaxUsg .error-text{fill:#552222;stroke:#55222…

Pangolin编译

文章目录 版本编译错误 版本 ubuntu 22 编译 # 复制选择版本(ORB SLAM 需要的版本为0.6) git clone https://github.com/stevenlovegrove/Pangolin.git cd Pangolin/ git checkout v0.6# 编译 mkdir build && cd build cmake .. -DCMAKE_INS…

倍福(Bechhoff) CX8090嵌入式PC控制器开发没有想像中的那么难

笔者曾2023年初曾为云南阜外医院新风系统开发自动控制系统。医院所有新风设备和公区照明全部采用倍福嵌入式PC控制器实现智能控制。其中新风和供水计量通过CX8090实现控制;公区照明通过BC9050实现控制;并采用美国邦纳人机界面(THM035B)实现远…

树形结构的窗口小部件

这段代码是一个使用Qt框架的C程序,实现了一个树形结构的窗口小部件(TreeWidget)。以下是主要的解释: #include "treewidget.h" #include "ui_treewidget.h"TreeWidget::TreeWidget(QWidget *parent) : QWidg…

DB2除法的小数位问题(四舍五入问题)以及其他常用的函数

DB2除法的小数位问题(四舍五入问题)以及其他常用的函数 1. DB2取第一条数据2. DB2 中指定值排序2.1 使用case when2.2 使用decode函数 3. 拼接函数4. 强制转换类型——cast函数5. DB2除法的小数位问题(四舍五入问题)5.1 关于round…

栈和排序.

给你一个1->n的排列和一个栈,入栈顺序给定 你要在不打乱入栈顺序的情况下,对数组进行从大到小排序 当无法完全排序时,请输出字典序最大的出栈序列 输入 第一行一个数n 第二行n个数,表示入栈的顺序,用空格隔开&…

three.js 关键帧动画

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"…

用汇编编写加解密函数

1.data段 data db "hello,sam" key db "key" dataLen dword ? endata byte 10 dup(0) dedata byte 10 dup(0) 2.Encryption&#xff08;加密&#xff09; Encryption procpush ebpmov ebp,esp;加密数据长度,循环次数mov ecx,sizeof data;寄存器不够用…

金和OA jc6 GetAttOut SQL注入漏洞复现

0x01 产品简介 金和OA协同办公管理系统软件(简称金和OA),本着简单、适用、高效的原则,贴合企事业单位的实际需求,实行通用化、标准化、智能化、人性化的产品设计,充分体现企事业单位规范管理、提高办公效率的核心思想,为用户提供一整套标准的办公自动化解决方案,以帮助…

方法 ‘NetWork.call()‘ 的签名与类 ‘Model‘ 中基方法的签名不匹配

方法 ‘NetWork.call()’ 的签名与类 ‘Model’ 中基方法的签名不匹配 这个错误通常出现在 TensorFlow 的 Keras 模型中&#xff0c;表示子类化的模型&#xff08;比如你的 NetWork 类&#xff09;在实现 call 方法时与基类 Model 中定义的 call 方法的签名不匹配。 在这里&am…

语义解析:如何基于SQL去实现自然语言与机器智能连接的桥梁

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 语义解析 定义 作用 语义解析的应用场景 场景一&#xff1a; 场景二&#xff1a; 总结语…

【LeetCode】winter vacation training

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;【LeetCode】winter vacation training 目录 &#x1f449;&#x1f3fb; 有效的字母异位词&#x…

129基于matlab的粒子群算法、遗传算法、鲸鱼算法、改进鲸鱼算法优化最小二乘支持向量机(lssvm)的gam正则化参数和sig2RBF函数的参数

基于matlab的粒子群算法、遗传算法、鲸鱼算法、改进鲸鱼算法优化最小二乘支持向量机&#xff08;lssvm&#xff09;的gam正则化参数和sig2RBF函数的参数。输出适应度曲线&#xff0c;测试机和训练集准确率。程序已调通&#xff0c;可直接运行。 129 matlabLSSVM优化算法 (xiaoh…

什么是k8s和声明式编程?

认识k8s之后&#xff0c;他的操作模式对我来说是一种很不错的体验。他提供了更接近现实世界的面向对象接口。 什么是k8s&#xff1f; Kubernetes&#xff08;K8s&#xff09;是一种开源容器编排平台&#xff0c;用于自动化部署、扩展和管理容器化应用程序。它简化了容器化应用…

【计算机图形学】作业:Bresenham 法绘制圆

题目&#xff1a; 请采用 Bresenham 法绘制圆&#xff08;共 30 分&#xff09;。要求&#xff1a; &#xff08;1&#xff09; 给出算法的文字描述&#xff08;共 15 分&#xff09;。 &#xff08;2&#xff09; 编写函数&#xff0c;在给定圆心坐标和半径的情况下&#xff…

【排序】对各种排序的总结

文章目录 前言1. 排序算法的复杂度及稳定性分析2. 排序算法的性能测试2.1 重复率较低的随机值排序测试2.2 重复率较高的随机值排序测试 前言 本篇是基于我这几篇博客做的一个总结&#xff1a; 《简单排序》&#xff08;含&#xff1a;冒泡排序&#xff0c;直接插入排序&#x…