[C++]桥接模式

2023-10-27

桥接模式即将抽象部分与它的实现部分分离开来,使他们都可以独立变化。

桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。

github源码路径:https://github.com/dangwei-90/Design-Mode

// 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

// 参考大话设计模式 - 桥接模式

#include <iostream>

#ifndef SAFE_DELETE
#define SAFE_DELETE(p) { if(p){delete(p); (p)=NULL;} }
#endif

using namespace std;

// 方法接口
class Implementor {
public:
  virtual void Operation() = 0;
};

class ImplementorA : public Implementor {
public:
  void Operation (){
    cout << "Operation A" << endl;
  }
};

class ImplementorB : public Implementor {
public:
  void Operation() {
    cout << "Operation B" << endl;
  }
};

class Abstruction {
public:
  Abstruction() {};
  Abstruction(Implementor* implementor) {
    implementor_ = implementor;
  }

  void SetImplementor(Implementor* implementor) {
    implementor_ = implementor;
  }

  void Operation() {
    implementor_->Operation();
  }

private:
  Implementor* implementor_ = nullptr;
};


int main()
{
  Implementor* implementor = new ImplementorA();
  // also , can use SetImplementor();
  Abstruction* abstruction = new Abstruction(implementor);
  abstruction->Operation();
  SAFE_DELETE(implementor);
  SAFE_DELETE(abstruction);

  implementor = new ImplementorB();
  abstruction = new Abstruction(implementor);
  abstruction->Operation();
  SAFE_DELETE(implementor);
  SAFE_DELETE(abstruction);


  return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[C++]桥接模式 的相关文章

  • 避免集合已修改错误

    Issue 我有以下代码 foreach var ItemA in GenericListInstanceB ItemA MethodThatCouldRemoveAnyItemInGenericListInstanceB 显然我得到一个错
  • 如何“杀死”Pthread?

    我正在学习 Pthreads 并且想知道杀死这样一个对象的最佳方法是什么 在寻找类似的问题后 我无法找到 明确 的答案 但请随时向我指出任何相关问题 我正在使用一个小型客户端服务器应用程序 其中服务器主线程正在侦听套接字上的客户端连接 每次
  • 异步方法中的异常未被捕获

    下面的代码没有捕获我的OperationCancelEException 它是通过调用抛出的ct ThrowIfCancellationRequested public partial class TitleWindow Window IA
  • 有没有办法使 C90 标准中的枚举无符号? (符合 MISRA-C 2004 标准)

    我正在尝试找到一种使枚举 无符号 的方法 enum x1 0 x2 x3 uint8 t x2 lt PC LINT MISRA C 2004 will complain about mixing signed and unsigned h
  • 返回指向 std::vector 中的对象的 a

    我有一个关于返回对向量元素的引用的非常基本的问题 有一个向量vec存储类的实例Foo 我想访问这个向量中的一个元素 不想使用向量索引 我应该如何编码该方法getFoo here include
  • 'goto *foo' 其中 foo 不是指针。这是什么?

    我正在玩标签作为值 https gcc gnu org onlinedocs gcc Labels as Values html并最终得到这段代码 int foo 0 goto foo 我的 C C 经验告诉我 foo means dere
  • 替换 JSON 中的转义字符

    我想用空格替换 JSON 字符串中的 字符 我怎样才能做到这一点 我发现从 JSON 字符串中删除所有转义字符的最简单 最好的方法是将字符串传递到正则表达式 Unescape 方法 此方法返回一个没有转义字符的新字符串 甚至删除了 n t
  • 获取给定EntityType的导航属性

    我在用VS2010 EF4 0 需要如下功能 private string GetNaviProps Type entityType eg typeof Employee NorthwindEntities en new Northwind
  • 套接字:监听积压并接受

    listen sock backlog 在我看来 参数backlog限制连接数量 这是我的测试代码 server initialize the sockaddr of server server sin family AF INET ser
  • 在 ncurses 中使用退格键

    我设置了一个简单的 ncurses 程序 它使用 getch 一次读取一个字符并将它们复制到缓冲区中 我遇到的问题是检测到按下退格键 这是相关代码 while buffer i c getch EOF i if c n break else
  • 为什么C++变量是指针时不需要正确定义?

    我对 C 语言完全陌生 特别是指针 经验主要是 PHP 并且希望对以下内容进行一些解释 我已经尝试寻找答案 这两行代码如何能够在我的程序中完成完全相同的工作 第二行似乎违背了我迄今为止所学到和理解的关于指针的一切 char disk 3 D
  • std::string 在 Visual Studio 上的具体行为?

    我有一个项目需要读取 写入大文件 我决定使用 ifstream read 将这些文件一次性放入内存中 放入 std string 中 这似乎是在 C 中执行此操作的最快方法 http insanecoding blogspot com 20
  • 如何使用 libpq 获取双精度值?

    The examples http www postgresql org docs 9 3 interactive libpq example htmllibpq 文档中展示了如何通过将整数值转换为主机字节序表示来获取整数值 我很好奇必须做
  • Qt:将拖放委托给子级的最佳方式

    我在 QWidget 上使用拖放 我重新实现了 DragEnterEvent dragLeaveEvent dragMoveEvent 和 dropEvent 效果很好 在我的 QWidget 中 我有其他 QWidget 子级 我希望它们
  • 如何解释“错误C2018:未知字符'0x40'?[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 在编译一些代码时 我收到以下信息 错误 C2018 未知字符 0x40 我想知道如何解决这样的问题 这是我要开始的地方
  • C 中的 N 依赖注入 - 比链接器定义的数组更好的方法?

    Given a 库模块 在下文中称为Runner 它作为可重复使用的组件 无需重新编译 即静态链接库 中应用程序分区架构的 而不是主分区 请注意 它仅包含main 出于演示目的 Given a set 顺序无关 调用的其他模块 对象Call
  • C/C++ 通过 Android NDK 在 JNI 中看不到 Java 方法

    我正在尝试从使用 NDK 构建的 C 类文件调用 Java 方法 它不断抛出常见的 未找到非静态方法 错误并导致整个 Android 应用程序崩溃 下面的代码片段 有些东西可能不需要 但我按原样保留它们 因为焦点 问题在于refreshJN
  • 在代码中而不是 XAML 中呈现 UserControl

    我想用RenderTargetBitmap将 UserControl 呈现为位图 而无需为其编写 XAML 当我这样做时 我得到一张空白图像 我是否错过了关键的一步 ValTool Controls VideoFisheyeOverlayC
  • 如何向 ItemsControl 中的 WPF 按钮添加相同的命令

    如何将命令添加到 wpf 按钮 该按钮是ItemsControl并正在修改ItemsSource itself 这是我的 XAML
  • FakeItEasy 代理方法调用实际实现

    我正在尝试将对假对象的调用代理到实际的实现 这样做的原因是我希望能够使用 Machine Specifications 的 WasToldTo 和 WhenToldTo 它们仅适用于接口类型的伪造 因此 我正在执行以下操作来代理对我的真实对

随机推荐

  • SaltStack部署

    目录 一 SaltStack简介 1 基本简介 2 通信方式 3 功能简介 二 资源获取 1 官网地址 2 阿里云地址 三 部署 1 配置环境说明 2 资源配置 一 SaltStack简介 1 基本简介 SaltStack是一种新型的基础设
  • IDEA 如何根据代码自动生成类图

    文件夹右键 gt Diagrams gt show Diagram gt Java classes diagram 选择类图的成员 成员变量 构造器 方法 配置文件 内部类 生成的类图
  • 读书感悟之,从术到道

    最近在看了一些书 因为书的内容和方向有着比较大的出入 自然就有了一些不同层面的感悟 在笔者看来 书籍大抵成三类 层面 1 术的层面 1 科普和不系统的知识类 如 电气知识1000问 各种论坛 帖子 公众号的非连载的知识类 人文社科的更多 这
  • visio绘制自制图案并填充

    1 首先打开 文件 gt gt 选项 gt gt 高级 勾选以开发人员模式运行 2 选择开发工具 选择线条 3 绘画出椭圆与线条 4 选择操作 使用修剪功能或得相交得两个部分 5 按照上述步骤绘制出想要得图案 全选后选择操作中的连接 6 对
  • 尝试在条件“($(MsBuildMajorVersion) < 16)”中对计算结果为“”而不是数字的“$(MsBuildMajorVersion)”进行数值比较

    https learn microsoft com en us nuget consume packages migrate packages config to package reference 我的处理方法简单粗爆 直接将packag
  • mysql映射表的作用_php – MySQL:了解映射表

    当使用多对多关系时 处理此事的唯一现实的方法是使用映射表 说我们有一所有老师和学生的学校 一个学生可以有多个教师 反之亦然 所以我们做3个表 student id unsigned integer auto increment primar
  • 【RabbitMq】05 RabbitMq 消息确认机制-可靠抵达

    一 保证消息不丢失 1 使用事务消息 性能下降250倍 2 消息确认机制 1 publisher confirmCallback 确认模式 2 publisher returnCallback 未投递到queue退回模式 3 consume
  • BLE连接建立过程详解

    同一款手机 为什么跟某些设备可以连接成功 而跟另外一些设备又连接不成功 同一个设备 为什么跟某些手机可以建立连接 而跟另外一些手机又无法建立连接 同一个手机 同一个设备 为什么他们两者有时候连起来很快 有时候连起来又很慢 Master是什么
  • 【解决问题】mysql 数据库字符串分割之后多行输出方法

    背景 项目需要从一张表查询出来数据插入到另一张表 其中有一个字段是用逗号分隔的字符串 需要多行输入到另一张表 那么这个如何实现呢 方案 下面先粘贴下sql语句 select SUBSTRING INDEX SUBSTRING INDEX v
  • Windows Server 2008 R2 实现多用户同时登陆

    Server 版系统一直都支持多用户同时登陆 这是一个很好用的功能 我们来看看怎么实现的 Start gt Administrator tools gt Remote Desktop Services gt Remote Desktop S
  • Android事件分发详解

    一 事件分发基础知识讲解 1 事件分发的 事件 是指什么 即 用户触摸屏幕时产生的点击事件 Touch事件 这个点击事件 Touch事件 会被封装成MotionEvent对象 从手指接触屏幕至手指离开屏幕这个过程产生的一系列事件 一般情况下
  • 包邮送50本清华出版社高质量Python、爬虫、机器学习书籍!

    来给大家送一波福利 这次联系了 9个好友一起给各位送书 每个号送 5 本 一共 50本 还包邮哦 具体书籍种类 介绍信息文中有详细介绍 这10个公众号 也是在Python AI 算法 数据科学领域非常优秀的公众号 也能帮助大家学到更多有用知
  • 使用 OpenVINO™及实际应用场景数据集加强已训练好的AI模型 - TensorFlow

    作者 Stewart Christie Ragesh Hajela及李翊玮 机器学习要求我们拥有现有数据 并非应用在运行时将使用的数据 而是要从中学习的数据库 实际上 你需要大量的真实数据 越多越好 您提供的示例越多 计算机应能够学习得越好
  • Linux--Qt Creator 创建桌面快捷方式(Ubuntu 亲测可用)

    在 usr share applications 目录下创建qtcreator desktop vim usr share applications qtcreator desktop 将如下内容复制到qtcreator desktop D
  • linux里安装Nginx

    一 下载 参考 https blog csdn net adaizzz article details 126669430 官网 http nginx org 里面展示了所有版本 根据需要下载你所需的版本即可 将下载好的安装包上传至Linu
  • Tomcat一些漏洞的汇总

    前言 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器 属于轻量级应用 服务器 在中小型系统和并发访问用户不是很多的场合下被普遍使用 是开发和调试JSP 程序的首选 目录 一 Tomcat 任意文件写入 CVE 2017 12
  • 球谐函数原理

    参考 球谐函数极其应用 球谐函数是什么 球谐函数是傅里叶级数的高维类比 由一组表示球体表面的基函数构成 同时 球谐函数是Laplace算子角动量在三个维度上的特征函数 文章目录 球谐函数是什么 球坐标下的Laplace方程 Laplace方
  • [Python+sklearn] 计算混淆矩阵 confusion_matrix()函数

    python sklearn 计算混淆矩阵 confusion matrix 函数 参考sklearn官方文档 sklearn metrics confusion matrix 功能 计算混淆矩阵 以评估分类的准确性 关于混淆矩阵的含义 见
  • TeamViewer——一款强大的远程控制工具

    前言 小编在对一款软件做维护的过程中由于一些地理的原因 所以只能依靠远程控制来进行维护工作 但是远程控制会由于一些原因导致中断 此时只能依靠对方再次同意或者发起远程才能继续工作 那么我们可不可以不需要对方的同意直接进行远程操作呢 答案是肯定
  • [C++]桥接模式

    桥接模式即将抽象部分与它的实现部分分离开来 使他们都可以独立变化 桥接模式将继承关系转化成关联关系 它降低了类与类之间的耦合度 减少了系统中类的数量 也减少了代码量 github源码路径 https github com dangwei 9