C++ 【桥接模式】

Windows进程CPU亲和性持久化设置:不依赖第三方工具实现进程核心绑定 CPU亲和性是操作系统进程调度中的关键技术概念,它决定了进程或线程可以在哪些CPU核心上运行。其原理是通过位掩码指定允许使用的处理器核心集合,从而控制进程的执行位置。这项技术的核心价值在于优化多核CPU的资源分配,减少跨核心迁移带来的缓存失效和上下文切换开销,从而提升计算密集型任务的性能稳定性。在应用场景上,CPU亲和性设置广泛用于软件性能测试、多线程程序调试、服务器资源隔离以及系统性能调优等领域。本文聚焦于解决Windows环境下进程CPU亲和性被系统自动重置的常见问题,通过系统原生工具如WMI事件监控和 阅读详情

简单介绍

桥接模式属于 结构型模式 | 可将一个大类或一系列紧密相关的类拆分 为抽象和实现两个独立的层次结构, 从而能在开发时分别使用。

聚合关系:两个类处于不同的层次,强调了一个整体/局部的关系,当汽车对象销毁时,轮胎对象也可以单独存在

public class 轮胎{  }
public class 汽车{
    protected:轮胎 tyre[4];
}

基础理解

Q:为什么要用桥接模式
A:使得抽象部分和实现部分分离,使它们可以独立地变化。且允许抽象部分和实现部分之间建立多对多的关系形成 聚合关系

Q:什么是抽象什么是实现
A:抽象 是一些实体的高阶控制层。抽象调用实现,实现来完成具体实现的工作

这里的形状就是抽象,与涂颜色(实现)形成聚合关系:形状包含涂颜色
在这里插入图片描述

UML 图

解释:客户端只需要调用抽象部分。抽象部分与实现部分成为聚合关系。你可以详写一个精确的抽象,然后就可以在客户端用这个精确的抽象调用具体的实现。


空心箭头:继承关系
实线箭头:关联关系
棱形实线箭头:聚合关系
在这里插入图片描述

抽象部分和实现部分

在实际的程序中, 你可以在两个独立方向上扩展这种应用:

开发多个不同的 精确抽象 (例如:面向微信用户和支付宝用户 )
支持多个不同的 具体实现 (例如:能够使用 密码支付 人脸支付 和 指纹支付)。

  1. 抽象对象控制程序的外观
    (微信用户和支付宝用户抽象成用户,通过这些抽象对象,我们可以统一对支付进行管理和调用,而不需要关心具体的支付实现方式。)
  2. 并将真实工作委派给连入的实现对象
    (抽象类与实现类发生聚合关系,抽象类可以调用密码支付 人脸支付 和 指纹支付方式)
  3. 不同的实现只要遵循相同的接口就可以互换
    (只要遵循了相同的接口:PaymentMode 支付接口,就可以在程序中互换使用)
  4. 精确抽象(微信用户)就可以使用多个具体实现接口( 密码支付 人脸支付 和 指纹支付)

关键点:聚合关系,精确抽象类构造函数中对不同API 的调用

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

// 支付方式接口
class PaymentMode
{
public:
    virtual ~PaymentMode() {}
    virtual bool security(string uId) = 0;
};

// 具体支付方式实现类:密码支付
class PayByCypher : public PaymentMode
{
public:
    bool security(string uId) override
    {
        cout << "密码支付的安全检查" << endl;
        // 实现具体的安全验证逻辑
        return true;
}
}
;

// 具体支付方式实现类:人脸支付
class PayByFace : public PaymentMode
{
public:
    bool security(string uId) override
    {
        cout << "人脸支付的安全检查" << endl;
        // 实现具体的安全验证逻辑
        return true;
    }
};

// 具体支付方式实现类:指纹支付
class PayByFingerprint : public PaymentMode
{
public:
    bool security(string uId) override
    {
        cout << "指纹支付的安全检查" << endl;
        // 实现具体的安全验证逻辑
        return true;
    }
};

// 支付抽象类
class Payment
{
public:
    Payment(PaymentMode *mode_) : mode(mode_) {}
    virtual ~Payment() {}
    virtual void pay(string uId, string tradeId, long long amount) = 0;

protected:
    PaymentMode *mode;
};

// 扩展抽象化角色:微信支付
class WxPayment : public Payment
{
public:
    WxPayment(PaymentMode *mode) : Payment(mode) {}

    void pay(string uId, string tradeId, long long amount) override
    {
        cout << "使用微信支付" << endl;
        bool isSecure = mode->security(uId);
        if (isSecure)
        {
            cout << "微信支付成功,交易号:" << tradeId << ",金额:" << amount << endl;
        }
        else
        {
            cout << "微信支付失败,交易号:" << tradeId << ",金额:" << amount << endl;
        }
    }
};

// 扩展抽象化角色:支付宝支付
class AliPayment : public Payment
{
public:
    AliPayment(PaymentMode *mode) : Payment(mode) {}

    void pay(string uId, string tradeId, long long amount) override
    {
        cout << "支付宝支付开始" << endl;
        bool isSecure = mode->security(uId);
        if (isSecure)
        {
            cout << "支付宝支付成功,交易号:" << tradeId << ",金额:" << amount << endl;
        }
        else
        {
            cout << "支付宝支付失败,交易号:" << tradeId << ",金额:" << amount << endl;
        }
    }
};

int main()
{
    PaymentMode *cypherMode = new PayByCypher();
    PaymentMode *faceMode = new PayByFace();

    Payment *wxPayment = new WxPayment(cypherMode);
    Payment *aliPayment = new AliPayment(faceMode);

    wxPayment->pay("user123", "123456", 100);
    aliPayment->pay("user456", "789012", 200);

    delete cypherMode;
    delete faceMode;
    delete wxPayment;
    delete aliPayment;

    system("pause");
    return 0;
}

应用场景

如果你想要拆分或重组一个具有多重功能的庞杂类 (例如能与多个数据库服务器进行交互的类), 可以使用桥接模式。

桥接模式可以将庞杂类拆分为几个类层次结构。 此后, 你可以修改任意一个类层次结构而不会影响到其他类层次结构。 这种方法可以简化代码的维护工作, 并将修改已有代码的风险降到最低。

如果你需要在运行时切换不同实现方法, 可使用桥接模式。

当然并不是说一定要实现这一点, 桥接模式可替换抽象部分中的实现对象,只需要在抽象部分中引入实现对象,并通过接口进行交互。

顺便提一句, 最后一点是很多人混淆桥接模式和策略模式的主要原因。 记住, 设计模式并不仅是一种对类进行组织的方式, 它还能用于沟通意图和解决问题。
(在实现上有点像但是策略模式主要是针对算法,根据你的具体情况使用合适的策略算法)

与其他模式的关系

  1. 桥接、 状态模式和策略模式 (在某种程度上包括适配器) 模式的接口非常相似。 实际上, 它们都基于聚合模式——即将工作委派给其他对象, 不过也各自解决了不同的问题。 模式并不只是以特定方式组织代码的配方, 你还可以使用它们来和其他开发者讨论模式所解决的问题。
  2. 你可以结合使用生成器模式和桥接模式: 主管类(定义调用构造步骤的顺序)负责抽象工作, 各种不同的生成器(会生成具体的产品)负责实现工作。
  3. 桥接模式通常会于开发前期进行设计, 使你能够将程序的各个部分独立开来以便开发。 另一方面, 适配器模式(为各种接口进行兼容和匹配)模式通常在已有程序中使用, 让相互不兼容的类能很好地合作。

浅薄理解,如果有错还望指正。谢谢大家。

c++实现桥接模式完整源代码 c++实现桥接模式完整源代码BridgePattern.hppmain.cpp BridgePattern.hpp #ifndef __BRIDGE_PATTERN_H__ #define __BRIDGE_PATTERN_H__ #include <iostream> #include <string.h> #include <mutex> using namespace std; // 实现类接口Implementor class Game { public: 阅读详情

相关推荐

C++ 桥接模式

桥接模式(Bridge Pattern)是将抽象部分与它的实现部分分离,使它们都可以独立地变化。

青春不老,奋斗不止! 9267

C++ 桥接模式 (Bridge Pattern)

flyfish

二分掌柜的 1700

ESP32S3电池电量监测实战:从分压电路到IDF组件配置(附GitHub源码)

本文详细介绍了ESP32S3电池电量监测的完整实战方案。从硬件分压电路的电阻选型、滤波设计,到软件层面利用ESP-IDF的ADC校准机制提升精度,并重点讲解了如何集成bat_monitor开源组件快速实现电压采集、电量计算、充电检测与事件通知。文章提供了从原理到调试的完整指南和GitHub源码,帮助开发者构建稳定可靠的物联网设备电源管理系统。

ee345的博客 530

C++设计模式——桥接模式(bridge pattern)

一、原理讲解 1.1意图 将抽象部分和实现部分分离,使它们可以独立的变化。(别名:handle/body) 1.2应用场景 当你不希望抽象和它的实现部分有一种紧密耦合关系,希望在运行时可以切换不同的实现; 类的抽象和实现都可以通过继承子类的方法进行扩充,这时可以选着桥接模式,运用组合方式分别对抽象和实现进行扩充; 当你像完全对客户隐藏抽象时,可以使用桥接模式;(继承时,抽象是可见的) 当你像抽象有多个扩展,实现也有多个方向扩展时使用。’ 1.3结构图(UML图) 桥接模式UML图 1.4

净无邪博客 2423

低供电电压CMOS偏置电路分析(有些类似于三支路电流源)

1、偏置电路原理图以及仿真结果 电路电流分析:Ip=Ip1=Ip2=Ip3,那么 Ip=12μnCoxWL(IpR−VTH)2 I_p=\frac{1}{2} μ_nC_{ox}\frac{W}{L} (I_{p}R-V_{TH})^2 Ip​=21​μn​Cox​LW​(Ip​R−VTH​)2 解出方程式即可得到参考电流及参考电压 2、电路电源抑制比PSRR分析 这里为了方便,小信号前都不加△ 首先做一个近似,由于gmRo>>1,直接将VDD变化导致的P3管漏级电压变化与VDD变化量做相等

qq_46579389的博客 2910

STM32F103C8T6实战:从零搭建三相SPWM逆变器(附MATLAB仿真、PCB、源码)

本文详细介绍了如何使用STM32F103C8T6单片机从零搭建三相SPWM逆变器,涵盖硬件选型、PCB设计、SPWM算法实现及MATLAB仿真。项目提供完整的工程文件,包括源码、PCB设计和仿真模型,适合电子工程师和学生进行实践学习。通过本教程,读者可以掌握逆变器设计的核心技术和调试方法。

weixin_30458043的博客 453

C++设计模式——桥接模式(Bridge Pattern)

C++设计模式——桥接模式(Bridge Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——桥接模式(Bridge Pattern)目录引言定义定义结构代码示例总结桥接模式和策略模式桥接模式和适配器模式适用场景优缺点参考资料 引言 假如有三个品牌的手机vivo,oppo和小米,如果手机手机壳一体生产,会是这样的: 对应到相应的类中,将是1+3+6=10个有继承关系的类,如果这时再加一个华为手机,无疑是要多增加3个类,会带来类的急剧增长。 如果手机手机壳分开生产,然后按需搭配,

leonardohaig的博客 1411

Visio 2013安装遇阻?手把手教你搞定注册表权限错误1402(附64位系统特殊处理)

本文详细解析了Visio 2013安装过程中常见的注册表权限错误1402问题,特别是在64位系统下的特殊处理方法。通过分步指导如何修改注册表权限、处理Wow6432Node分支以及使用高级工具如subinacl,帮助用户顺利完成安装并避免常见连带问题。

t8u9v0w1x的博客 545

【c++设计模式10】结构型2:桥接模式(Bridge Pattern)

定义桥接模式(Bridge Pattern)定义了两个独立变化的维度,即抽象和实现,通过组合的方式将抽象部分和实现部分连接在一起,从而使得它们可以独立地进行扩展和变化。桥接模式通过将抽象部分的方法委派给实现部分,可以使得抽象部分和实现部分可以独立地进行演化。桥接模式通过组合而不是继承的方式实现了两个独立变化维度之间的解耦,提高了系统的灵活性。

junxuezheng的博客 1176

Java课程设计——扫雷游戏程序

使用Java语言对扫雷游戏的复刻

m0_60671275的博客 3501

瑞芯微RK809音频驱动

瑞芯微RV1126中的RK809音频驱动开发

m0_61899715的博客 5221

【C++】桥接模式

桥接模式(Bridge Pattern)是一种【结构型】设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合而非继承来实现解耦,特别适用于需要处理多个变化维度的复杂系统。

AAADiao的博客 1320

RK3588设备树调试实战:解决NPU不加载、USB3.0识别异常与DP显示问题

本文深入探讨了RK3588设备树调试中的三大典型问题:NPU不加载、USB3.0识别异常与DP显示问题。通过详细的问题定位步骤、关键设备树修改和调试技巧,帮助开发者快速解决硬件适配中的挑战,提升RK3588平台的开发效率。

weixin_30576827的博客 477

桥接模式(Bridge Pattern) C++

在游戏开发中,桥接模式可以用于分离游戏的图形渲染引擎(实现化角色)和游戏中的对象(抽象化角色),以便独立地管理和扩展它们。Bridge 模式的结构图中可以看到,系统被分为两个相对独立的部分,左边是抽象部分,右边是实现部分,这两个部分可以互相独立地进行修改。定义游戏中的抽象对象GameObject,它持有一个对渲染引擎的引用,以便于对象可以使用不同的渲染引擎进行渲染。现在,如果想要在游戏中使用不同的渲染引擎来渲染对象,只需要在创建游戏对象时传入不同的渲染引擎实例即可。实现化角色:渲染引擎接口。

yaoyaohyl的博客 1065

【项目实战】YOLOV5 +实时吸烟目标检测+手把手教学+开源全部

本原创项目长期更新,旨在完成校园异常行为实时精检测,做到集成+N次开发+优化(不止局限于调包)为止,近期将不断更新以下模型+数据+标注文件+教程。关注博主,Star 一下github,一起开始美妙的目标检测之路吧~~ 文章目录本原创项目长期更新,旨在完成校园异常行为实时精检测,做到集成+N次开发+优化(不止局限于调包)为止,近期将不断更新以下模型+数据+标注文件+教程。关注博主,Star 一下github,一起开始美妙的目标检测之路吧~~一、项目展示二、项目资源共享1:训练图片:香烟图片+吸烟手势+烟雾三、

cv君的博客 13万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

(二)结构型模式:2、桥接模式(Bridge Pattern)(C++实现示例)

介绍桥接模式的含义,应用场景,以及用C++实现的示例

bigger_belief的博客 1141

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C++ 设计模式:桥接模式(Bridge Pattern)

C++ 设计模式:桥接模式(Bridge Pattern)

冀晓武的博客 678

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C++ 设计模式——桥接模式

桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们都可以独立地变化。这种模式通过组合的方式来代替继承,增加了系统的灵活性。

慢慢记录,慢慢更新。 2179

c++桥接模式

c++桥接模式简介UML优点缺点代码 简介 这是这些设计模式里,理解上最费劲的模式了。 将抽象化(Abstraction)与实现化(Implementation)分离,使得二者可以独立地变化。 以前我们实现一个接口直接使用继承 就好了。桥接模式则是把继承关系转化成了 组合关系。实现 了 抽象 与 实现 分离。 UML 优点 1.将实现抽离出来,再实现抽象,使得对象的具体实现依赖于抽象,满足了依赖倒转原则。 2.将可以共享的变化部分,抽离出来,减少了代码的重复信息。 3.对象的具体实现可以更加灵活,可以满足

lvxu666的博客 569

C++桥接模式详解

/ 实现接口:定义颜色操作的抽象public:// C++11默认析构函数// 获取颜色名称// 抽象类:形状(持有颜色实现的引用)protected:// 桥接核心:通过指针聚合实现接口public:explicit Shape(Color* c) : color(c) {} // 构造时传入具体颜色// 绘制接口桥接关键:抽象类Shape不直接依赖具体颜色(如Red),而是通过Color接口间接调用,这种"抽象依赖抽象"的设计实现了解耦。// 扩展抽象类:圆形。

qq_40343899的博客 1081

C++ 设计模式之桥接模式

再举个例⼦,遥控器就是抽象接⼝,它具有开关电视的功能,修正抽象就是遥控器的实例,对遥控器的功能进⾏实现和扩展,⽽电视就是实现接⼝,具体品牌的电视机是具体实现,遥控器中包含⼀个对电视接⼝的引⽤,通过这种⽅式,遥控器和电视的实现被分离,我们可以创建多个遥控器,每个遥控器控制⼀个品牌的电视机,它们之间独⽴操作,不受电视品牌的影响,可以独⽴变化。,它的UML图很像⼀座桥,它通过将【抽象部分】与【实现部分】分离,使它们可以独⽴变化,从⽽达到。桥接模式的主要⽬的是通过组合建⽴两个类之间的联系,⽽不是继承的⽅式。

K1_uestc的博客 1614

[C++]桥接模式

桥接模式即将抽象部分与它的实现部分分离开来,使他们都可以独立变化。 桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。 // 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // // 参考大话设计模式 #include <iostream> using namespace std; class Implementor { public: virtual void Operation() = 0; }; cla

就是那个党伟 451

桥接模式——C++实现

本文主要通过一个例子讲解了桥接模式的简单应用方法,并给出了C++的代码实现。

T_killer_的博客 674

C++设计模式之——桥接模式详解和代码实例

桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与其实现部分分离,使它们都可以独立变化。这种模式有时也被称作柄体(Handle and Body)模式或接口隔离模式。它的主要目的是将抽象层与实现层解耦,使得两者可以独立扩展而互不影响。

qqrrjj2011的博客 2846

C++桥接模式(Bridge)

UML类图(仅供参考)如下: 桥接模式解决的问题: 抽象类之间为聚合关系,将抽象部分与实现部分分离,使它们都可以独立的变化,这样他们的子类就可以任意聚合在一起 源码 #include <iostream> // 抽象类,桥的一部分 class CAbstractionImplement { public: virtual ~CAbstractionImpl...

Yan_bb_5的博客 435
上一篇: C++ 【抽象工厂】
下一篇: C++ 【生成器模式】
Absorbed__
博客等级 码龄5年 182粉丝 28原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值