C++设计模式之桥接模式(七)

设计模式C++实现(10)——桥接模式 软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大 阅读详情

bridge pattern

简介

  桥接模式(bridge pattern)是一种结构型模式;它是将抽象部分和实现部分进行分离,使它们都可以独立变化,互不干扰。常用于一个对象有多个变化因素,以及多个对象有共同的变化因素时,可以考虑桥接模式。
在这里插入图片描述

  • Abstract: 用于定义抽象类的借口,并维护一个指向ImplementAbstract类实现的指针。
  • RefineAbstractA/B: 扩充Abstract抽象类;在RefineAbstractA/B中可以调用在ImplementAbstract中实现的业务方法,即Operation()。
  • ConcreteImplementA/B: 实现ImplementAbstract中定义的接口,在不同的ConcreteImplementA/B中提供不同的实现方法。

优点: 将实现抽离出来,再实现抽象,使得对象的具体实现依赖与抽象,满足依赖倒转原则。将共享的部分,抽离出来,降低代码的冗余、提高代码的灵活性。
缺点: 必须要知道选择哪一种类需要实例化。

代码

// bridge_patern.h
class Abstract {
public:
    virtual void Operation() = 0;
}; // Abstract

class ImpelmentAbstract{
public:
    virtual void Operation();
}; // ImpelmentAbstract

class ConcreteImpelmentA: public ImpelmentAbstract{
public:
    void Operation() override;
}; // ConcretImpelmentA

class ConcreteImpelmentB: public ImpelmentAbstract{
public:
    void Operation() override;
}; // ConcretImpelmentB

class RefineAbstractA: public Abstract{
public:
    void Operation() override;
    RefineAbstractA(std::shared_ptr<ImpelmentAbstract>& impelment);
private:
    std::shared_ptr<ImpelmentAbstract> impelment_;
}; // RefineAbstractA

class RefineAbstractB: public Abstract{
public:
    void Operation() override;
    RefineAbstractB(std::shared_ptr<ImpelmentAbstract>& impelment);
private:
    std::shared_ptr<ImpelmentAbstract> impelment_;
}; // RefineAbstractB
// bridge_pattern.cpp
void ImpelmentAbstract::Operation() {

}

void ConcreteImpelmentA::Operation() {
    std::cout << "ConcretImpelmentA::Operation()" << std::endl;
}

void ConcreteImpelmentB::Operation() {
    std::cout << "ConcretImpelmentB::Operation()" << std::endl;
}

RefineAbstractA::RefineAbstractA(std::shared_ptr<patterns::ImpelmentAbstract>& impelment) {
    this->impelment_ = impelment;
}

void RefineAbstractA::Operation() {
    std::cout << "RefineAbstractA::Operation()" << std::endl;
    this->impelment_->Operation();
}

RefineAbstractB::RefineAbstractB(std::shared_ptr<patterns::ImpelmentAbstract>& impelment)
    : impelment_(impelment){

}

void RefineAbstractB::Operation() {
    std::cout << "RefineAbstractB::Operation()" << std::endl;
    this->impelment_->Operation();
}

int main(){
    std::shared_ptr<ImpelmentAbstract> impelment_a = std::make_shared<ConcreteImpelmentA>();
    std::shared_ptr<Abstract> abstract_a = std::make_shared<RefineAbstractA>(impelment_a);
    abstract_a->Operation();
    std::cout << "*******************************" << std::endl;

    std::shared_ptr<ImpelmentAbstract> impelment_b = std::make_shared<ConcreteImpelmentB>();
    abstract_a.reset(new RefineAbstractA(impelment_b));
    abstract_a->Operation();
    std::cout << "-------------------------------" << std::endl;

    std::shared_ptr<Abstract> abstract_b = std::make_shared<RefineAbstractB>(impelment_a);
    abstract_b->Operation();
    std::cout << "*******************************" << std::endl;

    abstract_b.reset(new RefineAbstractB(impelment_b));
    abstract_b->Operation();
	return 0;
}
C++设计模式——Bridge桥接模式 设计模式入门 阅读详情

相关推荐

基于IC动态加权的机器学习多因子选股策略:从模型融合到实战回测

在量化投资领域,多因子选股模型通过挖掘市场数据中的有效信号来预测股票收益。其核心原理在于利用统计学与机器学习算法,从海量因子中识别出与未来收益具有稳定相关性的特征。这一技术的核心价值在于将主观投资决策转化为系统化、可重复的客观过程,从而在控制风险的前提下追求超额收益。其典型应用场景包括股票阿尔法策略构建、Smart Beta产品设计以及资产配置中的股票筛选环节。本文聚焦于如何通过信息系数(IC)这一关键指标,动态融合Ridge回归、MLP神经网络和随机森林等多个预测模型,构建一个能够自适应市场风格轮动的选股

weixin_34216614的博客 451

常见的几种设计模式

第一次接触设计模式是1年多以前,那时要做UnDo/RdDo 功能,查阅相关书籍,发现使用设计模式中的Command模式可以很好解决这个问题,从那以后,开始学习设计模式,虽然不能完全领悟其中的意思,但在后来的工作不知不觉的也使用其中某些模式。现将以前学习设计模式的代码总结如下,以便更好的学习。一Bridge模式将抽象部分与它的实现部分分离,使它们都可以独立地变化。Bridge模式将继承关系转换为

wenxinfly的专栏 1480

【推荐100个unity插件之27】推荐5种办法实现unity人物布料系统 衣服裙子飘动 头发飘动 胸部抖动 骨骼模拟 配件摆动 尾巴摆动 —— 主要是Magica Cloth 2插件

要实现Unity中的人物布料系统并使其具备动态效果,可以探索多种技术方法。这些方法不仅可以使衣服、裙子、头发等元素自然飘动,还可以实现胸部抖动、骨骼模拟、配件摆动和尾巴摆动等细致效果。本文将深入探讨五种实现这些动态效果的技术方案,从基础的物理模拟到高级的动画控制,帮助你打造逼真的人物表现。本文主要探究Magica Cloth 2的使用,因为我想探究最好的实现方法,而不是探究最多的实现方法。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 6300

设计模式-工厂模式

package testDesignPattern; public class FactoryDemo { public static void main(String[] args) { // 简单工厂模式 Car carA = SimpleFactory.getInstance("A"); carA.print(); // 工厂方法模式 CarBFactory carBF

qingding2344的博客 189

ICC2: pin shape不在track上引起的drc如何解决?

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 434

基于深度学习的图像识别技术在农业领域中的应用

是识别"病害种类"还是"病害严重度分级"?前者是分类,后者常需分割或分级回归。是叶片级(离体叶片图像)、植株级(田间单株)、地块级(无人机俯拍)?视角不同,模型差异巨大。实时无人机巡检可能要求 < 50 ms/帧(Jetson Orin),而离线测报可接受秒级推理。类别标签、结构化 JSON、GIS 图斑、报警事件?

AI天才研究院 2167

自定义apt实战之一>抽象工厂

前面文章写了开始自定义APT之前需要了解的知识,刚开始接触自定义APT的小伙伴,可以看一下我前面的几篇文章: 自定义APT之:调试 自定义APT基础之:Element 自定义APT之:javapoet 自定义apt实战之一>Mapcreate 接着上篇文章,前面 我们自定义了apt用来生成key-value键值对。这章我们来创建抽象工厂。数据模型中有连个角色:工厂、产品,之前的关系属于生产。 先说说抽象工程相对于键值对反射的好处: 1.不需要反射,性能相对消耗相对较低; 2.低耦合,依赖关系由抽象工厂负责,

wengliuhu的博客 297

10年上位机开发踩过的20个坑:C#通信/线程/UI适配避坑指南

通信层:所有通信操作异步化、异常全覆盖,加断线重连+心跳检测,多设备隔离资源;线程层:UI更新必做跨线程判断,共享数据加锁,线程池限流,异常不静默;UI层:适配高分屏/DPI,用布局容器替代固定坐标,多屏场景绑定主屏幕。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 904

[学习][笔记]设计模式(基于C/C++实现)<七>桥接模式

文章目录桥接模式定义使用场景基本思路实例总结 桥接模式 定义 使用场景 基本思路 实例 总结

二次元怪兽的博客 459

VOS中历史话单显示通话会话超时中断详解

假设一种场景:  主叫拨打被叫,主叫方异常离线,被叫方接听,被叫方发送200ok至VOS,VOS传送200ok给主叫,但是主叫方未给出正常ack回应,VOS重发几次后(根据SIP参数设定的重发机制),然后VOS服务器会中断话务,历史话单终止原因为会话超时。 参考呼叫分析信令如下图: ...

非著名运维的博客 5017

使用强化学习快速让AI学会玩贪食蛇游戏(轻量级二十分钟训练+代码)

如何让AI玩会贪食蛇,甚至比你厉害概述构建问题(强化学习求解的一般步骤)环境动作定义状态定义奖励设计训练奖励值收敛图效果代码 概述 所用技术:强化学习(Deep Reinforcement Learning),属于一种无监督学习,利用奖励rewardrewardreward教会智能体AgentAgentAgent在合适的场景做合适的决策。 采用算法:试过两种算法D3QN和离散版本的PPO算法,最终采用离散版本PPO算法+GAE(PPO是我用过的性能最好的算法之一) 编程语言与深度学习框架:Python3.

ZYunfei的博客 2万+

7 设计模式之桥接模式(七)

适用场合:实现系统可能有多个角度分类,每一种分类都可能有变化,那么就把这种 多角度分离出来让它们独立变化,减少它们之间的耦合。 什么是桥接模式呢?桥接模式将抽象部分与它的实现部分分离,使它们可以独立变化。 下面是相关的主要架构代码: 1 两个抽象类HandsetBrand.java、HandsetSoft.java 1.1 HandsetBrand.javapackage com.ops.

362

卫朋:IPD流程落地之产品开发验证阶段解读

IPD验证阶段

产品线负责人 1487

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

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

慢慢记录,慢慢更新。 2179

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【C++】桥接模式

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

AAADiao的博客 1320

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

设计模式-桥接模式-bridge pattern

桥接模式(Bridge Pattern)是一种结构性设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。这种模式通过定义一个桥接接口,将实现的类和抽象的类解耦,从而能够独立地扩展抽象类和实现类。抽象(Abstraction):扩展抽象(Refined Abstraction):实现化(Implementor):具体实现化(Concrete Implementor):首先,定义实现化接口: 接着,创建具体的实现化类: 然后,定义抽象类: 接着,扩展抽象类: 最后,客户端代码使用桥接模式: 1.3.

wesigj的博客 2823

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

K1_uestc的博客 1614

C++设计模式结构型模式———桥接模式

桥接(Bridge)模式也叫桥梁模式,简称桥模式,是一种结构型模式。该模式所解决的问题非常简单,即根据单一职责原则,在一个类中,不要做太多事,如果事情很多,尽量拆分到多个类中去,然后在一个类中包含指向另外一个类对象的指针,当需要执行另外一个类中的动作时,用指针直接去调用另外一个类的成员函数。

无敌岩雀的博客 2353

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

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

qqrrjj2011的博客 2844

设计模式之桥接模式(C++实现)

桥接模式介绍,包括应用场景,优缺点,模式结构,类图 以及 C++代码示例

墨1024 1478

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

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

leonardohaig的博客 1411

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

目录 基本概念 代码与实例 基本概念 组合/聚合的好处:优先使用对象的组合/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类的继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。 桥接模式(Bridge),将抽象部分与实现部分分离,使它们都可以独立的变化。 桥接模式的核心意图就是把这些实现对立出来,让它们各自变化。这就使得每一种实现的变化不会...

IT1995的博客 5475

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

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

净无邪博客 2423

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

总之,桥接模式适用于需要将抽象部分和实现部分分离的场景,以实现灵活性、可扩展性和解耦的设计。它可以帮助处理多个维度上的变化,并在运行时动态地切换抽象和实现的关系。eg:手机品牌和软件是两个概念,不同的软件可以在不同的手机上,不同的手机可以有相同的软件,两者都具有很大的变动性。

喜欢打篮球的普通人 1497

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

一、简介 1、什么是桥接模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 2、使用桥接模式解决什么问题 声明抽象类和抽象类的实现类,使用桥接模式使二者直接都可以独立变化,达到解耦的目的。 ...

ymhdt的博客 1170

突破编程_C++_设计模式(桥接模式)

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

突破编程 1763
上一篇: C++设计模式之适配器模式(六)
下一篇: C++设计模式之装饰者模式(八)
一杯盐水
博客等级 码龄10年 62粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值