当前位置: 首页 > news >正文

(二)结构型模式:1、适配器模式(Adapter Pattern)(C++实现示例)

目录

1、适配器模式(Adapter Pattern)含义

2、适配器模式应用场景

3、适配器模式的UML图学习

4、C++实现适配器模式的示例


1、适配器模式(Adapter Pattern)含义

将一个接口转换为客户端所期待的接口,从而使两个接口不兼容的类可以在一起工作;

适配器模式通常用于将不兼容的类组合在一起工作,或将旧代码与新代码集成在一起。

适配器模式还有个别名叫:Wrapper(包装器),顾名思义就是将目标类用一个新类包装一下,相当于在客户端与目标类直接加了一层。

IT世界有句俗语:没有什么问题是加一层不能解决的

2、适配器模式应用场景

(1)当需要使用一个现存的类,但它提供的接口与我们系统的接口不兼容,而我们还不能修改它时;

(2)当多个团队独立开发系统的各功能模块,然后组合在一起,但由于某些原因事先不能确定接口时。

3、适配器模式的UML图学习

适配器模式有3个角色:

(1)Target:是一个接口,是客户端使用的目标接口;

(2)Adaptee:是我们想要的接口,与Target不兼容的类,这个可以是一个接口或类;

(3)Adapter:适配器类,此模式的核心。它需要实现目标接口Target,而且必须引用Adaptee,因为我们要在此类包装Adaptee的功能;

4、C++实现适配器模式的示例


#include <iostream>
#include <string>// 目标接口
class Target 
{
public:virtual void request() const = 0;
};// 源接口
class Adaptee 
{
public:void specificRequest() const {std::cout << "Adaptee: specificRequest" << std::endl;}
};// 类适配器
class Adapter : public Target, private Adaptee 
{
public:void request() const override {specificRequest();}
};int main() 
{// 使用适配器调用目标接口Target* target = new Adapter();target->request();delete target;return 0;
}

在上述示例中,我们首先定义了目标接口(Target),其中包含了一个纯虚函数request()。然后,我们定义了源接口(Adaptee),其中包含了一个具体函数specificRequest()

接着,我们通过类适配器的方式实现了适配器类(Adapter),它继承自目标接口,并私有继承源接口。在适配器类中,我们实现了目标接口的纯虚函数,内部调用了源接口的具体函数。

在主函数中,我们创建了一个适配器对象,并通过目标接口调用了适配器的request()函数。由于适配器类同时继承了目标接口和源接口,所以在调用request()函数时,实际上会调用到适配器类中的具体函数。

相关文章:

(二)结构型模式:1、适配器模式(Adapter Pattern)(C++实现示例)

目录 1、适配器模式&#xff08;Adapter Pattern&#xff09;含义 2、适配器模式应用场景 3、适配器模式的UML图学习 4、C实现适配器模式的示例 1、适配器模式&#xff08;Adapter Pattern&#xff09;含义 将一个接口转换为客户端所期待的接口&#xff0c;从而使两个接口…...

【编程二三事】ES究竟是个啥?

在最近的项目中&#xff0c;总是或多或少接触到了搜索的能力。而在这些项目之中&#xff0c;或多或少都离不开一个中间件 - ElasticSearch。 今天忙里偷闲&#xff0c;就来好好了解下这个中间件是用来干什么的。 ES是什么? ​ ES全称ElasticSearch&#xff0c;是个基于Lucen…...

爬虫逆向实战(三)--天某云登录

一、数据接口分析 主页地址&#xff1a;天某云 1、抓包 通过抓包可以发现登录接口是account/login 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过“载荷”模块可以发现password、comParam_signature、comParam_seqCode是加密的 请求头是否加密&#xff1f; 无…...

不要过于迷恋软件架构,要重视如何设计根据简单和清晰的设计

1. 设计一个计算机系统的目标应该是简单性 。 系统越简单&#xff0c;理解起来就越简单&#xff0c;找到问题就越简单&#xff0c;实现它就越简单。描述的语言越清晰&#xff0c;设计就越容易理解。 干净的设计类似于干净的代码&#xff1a;它易于阅读且易于理解。 2. 如何编…...

Grafana监控 Redis Cluster

Grafana监控 Redis Cluster 主要是使用grafana来实现监控&#xff0c;grafana可以对接多种数据源&#xff0c;在官网中可以找到Redis数据源&#xff0c;需要安装redis data source插件。当然也可以利用Prometheus来做数据源&#xff0c;下面分别记录一下这两种数据源的安装配置…...

k8s 认证和权限控制

k8s 的认证机制是啥&#xff1f; 说到 k8s 的认证机制&#xff0c;其实之前咋那么也有提到过 ServiceAccouont &#xff0c;以及相应的 token &#xff0c;证书 crt&#xff0c;和基于 HTTP 的认证等等 k8s 会使用如上几种方式来获取客户端身份信息&#xff0c;不限于上面几种…...

性能优化的重要性

性能优化的重要性 性能优化的重要性摘要引言注意事项代码示例及注释性能优化的重要性 性能优化的重要性在 Java 中的体现响应速度资源利用效率扩展性与可维护性并发性能合理的锁策略线程安全的数据结构并发工具类的应用避免竞态条件和死锁 总结代码示例 博主 默语带您 Go to Ne…...

Leetcode No.53 Maximum Subarray

参考资料&#xff1a; 考点&#xff1a;子串 & 动态规划 & [题干] Input: nums [-2,1,-3,4,-1,2,1,-5,4] Output: 6 Explanation: The subarray [4,-1,2,1] has the largest sum 6.1. 心路历程 这道题非常经典&#xff0c;蕴含的思想也是精巧无比。 2. 正解 简单来说官…...

手机出现 不读卡 / 无信号时应该怎么办?

当手机屏幕亮起&#xff0c;一般在屏幕最上方都会有代表手机卡状态的显示&#xff0c;其中网络信号和读卡状态的标识&#xff0c;依旧有很多人分不太清&#xff0c;更不清楚改怎么办了。 1、当我们的手机里有两张卡时&#xff0c;则会有两个信号显示 2、信号状态一般是由短到…...

Linux 内核模块运行机制(10/11)

Linux 内核实现了一个比较酷的功能&#xff1a;支持模块的动态加载和运行。如果你实现了一个内核模块并打算运行它&#xff0c;你并不需要重启系统&#xff0c;直接使用 insmod 命令加载即可&#xff0c;这个模块就像补丁一样打进了 Linux 操作系统&#xff0c;并可以正常运行。…...

MySQL数据库-字符串函数详解

前言 MySQL数据库提供了多种不同类型的函数&#xff0c;用于处理字符串、日期、数值等数据类型&#xff0c;以及实现条件、聚合等操作&#xff0c;下面我们主要介绍字符串函数 CONCAT() 函数 CONCAT() 可用于将多个字符串连接在一起。 示例&#xff1a; SELECT CONCAT(Hell…...

半导体退火那些事(3)

4.半导体退火设备 双腔全自动兼容6-8寸快速退火炉RTP 产地:中国 型号: S803 特点: 室温到1250C&#xff0c;应用于SiC&#xff0c;GaN等第三代半导体领域 简介 (Description) S803系列自动快速退火炉&#xff0c;内置Robot可以自动取放片&#xff0c;适用于最大8英寸 (单片200m…...

1281. 整数的各位积和之差

诸神缄默不语-个人CSDN博文目录 力扣刷题笔记 文章目录 1. 简单粗暴的遍历2. 其实也是遍历&#xff0c;但是用Python内置函数只用写一行 1. 简单粗暴的遍历 Python版&#xff1a; class Solution:def subtractProductAndSum(self, n: int) -> int:he0ji1while n>1:last…...

如何使用Vue和C++实现OJ《从零开始打造 Online Judge》

课程简介 课程链接&#xff1a;https://www.lanqiao.cn/courses/20638 邀请码&#xff1a;x8pGd60V 本课程采用前后端分离架构&#xff0c;基于 Vue.js 和 C 技术&#xff0c;从零开始打造 Online Judge。 课程介绍 OJ 是 Online Judge 系统的简称&#xff0c;用来在线检测…...

在Spring Boot和Vue中实现请求过滤器以验证请求头中的Token

在Spring Boot应用程序中创建一个过滤器类&#xff0c;用于处理请求&#xff1a; Component public class AuthenticationFilter implements Filter {Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException,…...

ThreeJS——在3D地球上标记中国地图板块

Threejs3D地球标记中国地图位置 先看效果 地球预览视频效果 用到的库 TweenJS (动画库)用来做相机转场的动画Jquery(这里只用到一个 each 循环方法&#xff0c;可以使用 js 去写)ThreeJS (3D 地球制作)100000.json(全国城市经纬度)d3.v6.js用来设置平面转3D效果(本来考虑做成…...

第2章 性能测量

理解应用程序性能的第一步是学会对它进行测量。 与绝大多数功能问题相比&#xff0c;性能问题通常很难跟踪和复现。 任何关注过性能评估的人可能都知道公允地进行性能测量并从中得到准确结论是多么困难。 因为在测量中存在误差&#xff0c;性能分析通常需要统计方法进行处理…...

未来,运营的重要性大于产品?

微博上看到某产品大V的一个观点&#xff0c;说在未来&#xff0c;产品运营的重要性会大过产品经理&#xff0c;还挺认同的&#xff0c;谈谈我的想法。 这个观点的核心依据是&#xff0c;目前没有新的产品形态&#xff0c;各种产品解决方案都是标准化的&#xff0c;产品由开疆辟…...

paddle ocr框架识别数字问题和解决方案

识别出的字符串重复 情况1&#xff1a;检测错误&#xff0c;同一个字符串被两次检测到 比如 “12 方案 ” 被识别成&#xff1a;“12” “2方案”&#xff0c;这种可以通过x坐标交叉并且第一个结果最后一个字符与第二个结果第一个字符相同判断 情况2&#xff1a; 识别错误&am…...

构建高性能的MongoDB数据迁移工具:Java的开发实践

随着大数据时代的到来&#xff0c;数据迁移成为许多企业和组织必须面对的挑战之一。作为一种非关系型数据库&#xff0c;MongoDB在应用开发中得到了广泛的应用。为了满足数据迁移的需求&#xff0c;我们需要一个高性能、稳定可靠的MongoDB数据迁移工具。下面将分享使用Java开发…...

App无辜躺枪?手把手教你搞定腾讯手机管家误报导致的应用商店下架

当合规应用遭遇误报下架&#xff1a;开发者系统性应对指南运动健康类应用被标记为金融诈骗软件&#xff1f;社交工具因"病毒风险"被各大商店紧急下架&#xff1f;这类看似荒谬的误报事件&#xff0c;正在成为中小开发团队的"无妄之灾"。某知名运动App开发团…...

AX-MES生产制造管理系统-总览

前言说起 MES 就不得不说 ERP&#xff0c;但是 ERP 大家基本上都知道&#xff0c;MES 就不一定了&#xff0c;常见的 ERP 系统包括 SAP、金蝶、用友等&#xff0c;ERP的流程相对来说也比较统一&#xff1b;MES就不同了&#xff0c;基本上熟悉业务流程的软件公司都可以开发并实施…...

从测速到配置:一套完整的cFosSpeed网络加速保姆级教程(适用于小白)

从零开始掌握cFosSpeed&#xff1a;网络加速全流程实战指南对于经常进行在线游戏、视频会议或大文件传输的用户来说&#xff0c;网络延迟和带宽利用率低下往往是影响体验的关键痛点。cFosSpeed作为一款专业的网络流量优化工具&#xff0c;能够显著改善这些问题&#xff0c;但许…...

组态王通用扫码枪配置

使用组态王扫码枪驱动&#xff0c;是绑定变量&#xff0c;扫码后直接就可以显示扫码内容。解决每次扫码输入数据时必须先用鼠标点进输入框内的问题。驱动安装先添加驱动&#xff0c;亚控网站的文件为 barcodescanner&#xff0c;这个文件是组态王通用扫码枪的驱动&#xff0c;但…...

终极鼠标连点器使用指南:3分钟掌握高效自动化技巧

终极鼠标连点器使用指南&#xff1a;3分钟掌握高效自动化技巧 【免费下载链接】MouseClick &#x1f5b1;️ MouseClick &#x1f5b1;️ 是一款功能强大的鼠标连点器和管理工具&#xff0c;采用 QT Widget 开发 &#xff0c;具备跨平台兼容性 。软件界面美观 &#xff0c;操作…...

Windows文件夹共享

目标&#xff1a;同一局域网实现在一台计算机上共享文件夹&#xff0c;在另一台电脑访问一、电脑A 1.点击要共享的文件夹 -> 属性 -> 共享2.添加Everyone用户组3.控制面板中网络共享关闭密码保存&#xff0c;在访问时不用输入账号密码。二、电脑B 1.在文件资源管理器路径…...

5个必知的Universal-Updater高级功能:从QR扫描到后台安装

5个必知的Universal-Updater高级功能&#xff1a;从QR扫描到后台安装 【免费下载链接】Universal-Updater An easy to use app for installing and updating 3DS homebrew 项目地址: https://gitcode.com/gh_mirrors/un/Universal-Updater Universal-Updater是一款专为任…...

基于KS距离度量交通流分布偏移:提升DRL交通信号控制鲁棒性的工程实践

1. 项目概述与核心挑战在智能交通系统&#xff08;ITS&#xff09;领域&#xff0c;基于深度强化学习&#xff08;DRL&#xff09;的交通信号控制&#xff08;Traffic Signal Control&#xff09;正从研究走向实际部署。作为一名长期关注AI落地应用的从业者&#xff0c;我见过太…...

【独家首发】Sora 2 AVI支持并非“开箱即用”:3层封装校验机制详解(RIFF→AVI→OpenCV Mat内存映射链路图解)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Sora 2 AVI支持并非“开箱即用”&#xff1a;核心矛盾与技术定位 Sora 2 的官方文档与发布说明中明确将 AVI 视为“实验性容器支持”&#xff0c;而非默认启用的输入格式。其底层解码栈基于 FFmpeg 5.1 构建&…...

对比直接调用厂商API使用Taotoken聚合调用的延迟体感差异

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直接调用厂商API使用Taotoken聚合调用的延迟体感差异 在将应用从直接调用单一厂商的模型API迁移到Taotoken平台后&#xff0c;…...