C++适配器模式

2023-11-09

适配器模式

1、适配器模式简介

  适配器模式其实是实现了两个互不兼容的已有系统之间的桥梁效果,所以适配器模式可以说是为了实现功能的一种补救措施,最好的方式是将系统重构使用工厂模式即可,但是对已有系统的重构代价过大,所以一般情况下我们都会通过适配器模式来解决此类问题。

2、适配器模式适用场景

  两个互不相关且接口相互隔离互不兼容的类由于某些原因而需要相互配合一起工作时使用

3、举例说明

  A系统和B系统是两个互不相关的系统,现在需要在A接口中实现B系统里的功能,那么就可引用适配器模式,将适配器继承自A系统重写A需要调用的接口,同时在适配器中维护一个系统B的对象的引用,那么就可以通过在重写的接口中使用B的对象来调用B的接口。如此便实现了系统A和系统B的适配

//A系统
class A
{
public:
    virtual void funcA()
    {
        cout << "A类的功能实现" << endl;
    }
};

//B系统
class B
{
public:
    virtual void funcB()
    {
        cout << "B类的功能实现" << endl;
    }
};


//引入适配器
class Adapter : public A
{
public:
    Adapter(B *pB) :m_pB(pB){}
    virtual void funcA()
    {
        m_pB->funcB();
    }
private:
    B *m_pB;
};

//调用
int main()
{
    B *pTempB = new B;
    A *pTempA = new Adapter(pTempB);
    pTempA->funcA();
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++适配器模式 的相关文章

  • 类变量在其定义范围内?

    这可能是一个愚蠢的问题 我正在尝试制作文本泥 我需要每个 Room 类包含其他 Room 类 以便在尝试移动到它们或从它们获取信息时可以引用 但是 我不能这样做 因为我显然无法在其定义中声明一个类 那么 我该怎么做呢 当我说我做不到时 我的
  • 如何在运行 ASP.NET 页面时以编程方式设置表格背景?

    我有一个 aspx 页面 其默认背景颜色是一种 当选择单选按钮的某个选项时 我需要能够以编程方式更改它 我尝试设置表的 ID 字段 但似乎无法在 C 代码隐藏文件中访问它 我原来的表是 table style width 100 backg
  • 你好世界,裸机 Beagleboard

    我正在尝试在我的 Beagleboard xm rev 上运行 hello world 类型的程序 C 通过调用 Cputs功能来自装配 到目前为止 我一直使用这个作为参考 http wiki osdev org ARM Beagleboa
  • 如何使用 Regsvr32 注册 .NET COM DLL?

    我有一个使用 COM DLL 的 VB6 应用程序 该DLL是用C 编写的 在 C 项目属性中 我检查了 Register for COM interop 选项 VB6 应用程序在我的开发机器上运行良好 C 代码完全遵循以下格式 CodeP
  • 在 C++ 中从另一个数组初始化结构内的数组[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions struc
  • boost变体简单调用常用方法

    我有两个指针 只能设置其中之一 所以我正在考虑使用 boost variant 例如 boost variant
  • System.NotSupportedException:“集合是只读的。”从 iList 中删除对象时抛出

    运行下面的代码片段时抛出异常 我有一个 iListof webelements 如果该元素包含字符串 WSC 我想将其从 iList 中删除 谁能帮我吗 代码如下 IList
  • 将私有部分保留在 C++ 标头之外:纯虚拟基类与 pimpl

    我最近从 Java 和 Ruby 切换回 C 令我惊讶的是 当我更改私有方法的方法签名时 我必须重新编译使用公共接口的文件 因为私有部分也位于 h 文件中 我很快想出了一个解决方案 我想这对于 Java 程序员来说是典型的 接口 纯虚拟基类
  • 从动态服务器中抓取 html 列表数据

    哈喽大家好 抱歉提出转储问题 这是我最后的手段 我发誓我尝试了无数其他 Stackoverflow 问题 不同的框架等 但这些似乎没有帮助 我有以下问题 一个网站显示一个数据列表 前面有大量的 div li span 等标签 它是一个很大的
  • 需要帮助将 winform 迁移到 net 5

    我正在将 winform 应用程序从 net core 3 1 移植到 net 5 并收到以下错误 严重性代码 说明 项目文件行抑制状态 错误NETSDK1136 目标平台必须设置为Windows 通常 通过在 TargetFramewor
  • 向量和常量

    考虑一下这个 void f vector
  • OpenCV:处理每一帧

    我想使用 OpenCV 编写一个跨平台应用程序进行视频捕获 在所有示例中 我发现来自相机的帧是使用抓取功能进行处理并等待一段时间 我想处理序列中的每一帧 我想定义自己的回调函数 每次当一个新帧准备好处理时都会执行该函数 例如直播对于 Win
  • 允许使用 AutoMapper 或类似工具映射动态类型吗?

    我已经开始使用https github com robconery massive https github com robconery massive对于一个项目 我想知道是否有任何映射工具可以支持动态到静态类型的映射 我以前使用过 Au
  • 为什么一个结构体,如果没有显式的默认构造函数,则无法编译将另一个结构体作为成员包装在联合体中的结构体?

    这就是我所说的关系 struct A int i 1 struct B union A a void main B b 在这个星座中 我的编译器 vs2015 抱怨 B 的默认构造函数B B void 被删除 并附有编译器已生成的注释B B
  • 隐式类型转换 - 编译器错误

    这个问题与this https stackoverflow com questions 3529449 can i make the ternary operator treat my class like a bool问题 下面的代码在V
  • C++ 从文件中读取字符串

    我试图将字符串直接存储到一个文件中 以便稍后在 C 中读取 基本上 对于整个范围 我试图将带有字符串变量的对象数组存储在文件中 并且这些字符串变量将通过类似 object 的内容读取 0 字符串 然而 每次我尝试读取字符串变量时 系统都会给
  • 将整个单词与特殊字符匹配的正则表达式不起作用? [复制]

    这个问题在这里已经有答案了 我正在经历这个问题C Regex Match 整个单词 https stackoverflow com q 1209049 443568 它说要匹配整个单词使用 b模式 b 这对于匹配没有任何特殊字符的整个单词效
  • wpf中的图像问题(图像不显示)

    我不明白为什么我无法在 WPF 中显示图像 也许我不小心修改了我的资源文件夹 这就是我没有显示的原因 所以我创建了一个新的 wpf 应用程序 我有这个 当我运行该程序时 我的图片显示为 为什么当我尝试在程序中执行相同的操作时 图像没有显示
  • In 和 Out 属性在 .NET 中如何工作?

    我一直在尝试跨序列化数组AppDomain边界 使用以下代码 public int Read byte buffer int offset int count return base Read buffer offset count 作为猜
  • 文件按文件名模式存在

    我在用 File Exists filepath 我想做的是将其替换为模式 因为文件名的第一部分发生了变化 例如 该文件可以是 01 peach xml 02 peach xml 03 peach xml 如何根据某种搜索模式检查文件是否存

随机推荐

  • 阿里云ECS FTP搭建

    阿里云ECS windows版 FTP服务设置教程 1 https www filezilla cn 去下载服务端和客户端并安装好 2 阿里云添加安全组 3 FileZilla服务端配置 4 FileZilla客户端使用端口10021连接服
  • AI巨浪下,数据技术如何驱动智能未来?

    引言 数据技术是大数据时代的核心驱动力 也是推动各行各业数字化转型和智能化升级的关键因素 随着云计算 人工智能 区块链等新兴技术的不断发展和融合 数据技术也呈现出多模态 混合处理 自动化管理等新的趋势和特点 8 月 19 日 周六 第八届
  • MongoDB:模糊查询、数量、结果插入新表、重复字段

    模糊查询 body中包含 db getCollection test find body regex 骗子 body或title中包含 db getCollection test find or body regex 骗子 title re
  • astype转换数据类型

    astype方法 通用函数 可以用于把dataframe中的任何列转换成其他类型 常见的数据类型有 int 整型 float 浮点型 object str 字符串 category 分类数据 import pandas as pd impo
  • Django基础知识整理之DRF框架

    文章目录 1 DRF框架简介 2 DRF特点 3 环境安装与配置 4 DRF牛刀小试 1 创建序列化器 2 编写视图 3 定义路由 4 运行测试 1 DRF框架简介 Django REST framework 框架是一个用于构建Web AP
  • Flutter的Toast之oktoast的使用

    1 在pubspec yaml中加入 oktoast 2 0 0 然后运行package get 2 包装 app widget 在main dart中 必须使用OKToast包起来 3 调用 如果只是Toast文字 可直接调用showTo
  • 阿里云的OSS云存储的使用

    阿里云官网 https www aliyun com 通过阿里云官网 登录进入用户的界面 在搜索框中输入OSS 然后进入阿里云的对象存储OSS的控制台 未开通的开通即可 创建 Bucket 点击 Bucket 列表 查看个人的Bucket
  • 区块链:建立加密代币

    启动testrpc 打开终端 启动testrpc testrpc EthereumJS TestRPC v6 0 3 ganache core 2 0 2 代币合约的基本概念 代币合约扮演的角色相当于银行的角色 使用者在代币合约中 用自己的
  • 【Eigen 1】Eigen中的norm、normalize、normalized三者对比

    一 norm 1 对于Vector norm返回的是向量的二范数 即 x 2
  • 【vue2+element ui】添加修改共用表单的下拉框回显问题分析以及解决方案(附共用表单代码)

    目录 简介 问题复原 问题分析 共用表单代码分享 简介 本人前端水平不佳 本文分享在编写个人项目前端代码的时候遇到的回显问题的解决办法 仅供参考 问题复原 首先展示表单中的问题代码 本次前端的设计是添加和修改操作共用表单 但是其中有一个下拉
  • 陀螺产业区块链第三季

    2020年4月 国家发改委在例行新闻发布会上宣布区块链被正式列为新型基础设施中的信息基础设施 自此区块链正式搭上新基建的 风口 与传统基础设施建设相比 新型基础设施建设更加侧重于突出产业转型升级的新方向 无论是5G还是区块链 都体现出加快推
  • 网站服务器停止服务,DDoS攻击是如何让网站停止服务的?

    DDoS攻击 是一种耗尽攻击目标的系统资源 导致攻击目标无法响应正常的服务请求的网络攻击方式 虽然 大规模的DDoS攻击占据了大部分的头条新闻 但实际上 较小的DDoS攻击在网络安全环境中更为常见 在没有做好充分的防护之下 较小规模的DDo
  • 电动汽车移动充电站Mobi Charger问世

    12月26日 电动和混合动力汽车新闻网站Ecomento报道称 初创公司FreeWire针对电动汽车推出了移到充电设备Mobi Charger 目前 社会尚未认同在办公场所为电动汽车充电 举例而言 当你已经开始工作 而电动汽车正在外面充电
  • 微信小程序实现商品列表跳转详情页

    实验要求 模仿京东小程序 实现下列功能 首页包含了手机图片 手机的描述 手机的价格 购物车图标 首页显示两行文字 多余的文字隐藏 以3个点代替 点击页面不同的地方 能够跳转到不同的手机详情页面 手机详情页包含手机图片 上架日期 价格 手机描
  • centos 8 编译安装hyperscan

    一 编译安装环境配置 官方文档 http intel github io hyperscan dev reference getting started html 1 1硬件配置 配置 参数 CPU Intel Xeon Gold 5218
  • 统计学 相关性 因果_为什么相关性不表示因果关系-这种在统计中的常用说法的含义...

    统计学 相关性 因果 You might remember this simple mantra from your statistics class 您可能还记得统计课上的这个简单口头禅 Correlation does not impl
  • phpMyAdmin报错 in ./libraries/config/FormDisplay.php#661 continue targeting switch is equivalent to

    phpMyAdmin报错 in libraries config FormDisplay php 661 continue targeting switch is equivalent to break Did you mean to us
  • Android 13 媒体权限适配指南

    在 Android 系统最近的几个大版本里 更新方向有很大一部分都集中在了隐私安全这一方面 每个版本都会新增隐私安全限制 或者是对之前的隐私项进行进一步的升级 Android 10 分区存储 限制访问不可重置的硬件标识符 限制对剪贴板数据的
  • uView1.0 indexList索引列表遇到的坑

    在使用uView索引列表做通讯录的时候遇到了几个问题 先上图片 问题1 右侧的abcd首字母按钮点击错乱 比如点了f 弹出显示的是a开头的人 应该是f开头的人才对 通过排查 发现传入这个右侧组件参数的时候 后端并没有返回完整的A Z 而是有
  • C++适配器模式

    适配器模式 1 适配器模式简介 适配器模式其实是实现了两个互不兼容的已有系统之间的桥梁效果 所以适配器模式可以说是为了实现功能的一种补救措施 最好的方式是将系统重构使用工厂模式即可 但是对已有系统的重构代价过大 所以一般情况下我们都会通过适