设计模式之 bridge

【开源电机驱动】H 桥驱动-软件篇 H-bridge Control H 桥控制 Introduction 引言 In theprevious partof the series we went through the various circuits that can take logic level digital signals and make them suitable for driving the gates of the bridge power FETs. These circuits range from .. 阅读详情

常见设计模式的解析和实现(C++)之七-Bridge模式

作用:
将抽象部分与它的实现部分分离,使它们都可以独立地变化。

UML结构图:


抽象基类:
1)Abstraction:某个抽象类,它的实现方式由Implementor完成.
2)Implementor:实现类的抽象基类,定义了实现Abastraction的基本操作,而它的派生类实现这些接口.

接口函数:
1)Implementor::OperationImpl:定义了为实现Abstraction需要的基本操作,由Implementor的派生类实现之,而在Abstraction::Operation函数中根据不同的指针多态调用这个函数.

解析:
Bridge用于将表示和实现解耦,两者可以独立的变化.在Abstraction类中维护一个Implementor类指针,需要采用不同的实现方式的时候只需要传入不同的Implementor派生类就可以了.

Bridge的实现方式其实和Builde十分的相近,可以这么说:本质上是一样的,只是封装的东西不一样罢了.两者的实现都有如下的共同点:抽象出来一个基类,这个基类里面定义了共有的一些行为,形成接口函数(对接口编程而不是对实现编程),这个接口函数在Buildier中是BuildePart函数在Bridge中是OperationImpl函数;其次,聚合一个基类的指针,如Builder模式中Director类聚合了一个Builder基类的指针,而Brige模式中Abstraction类聚合了一个Implementor基类的指针(优先采用聚合而不是继承);而在使用的时候,都把对这个类的使用封装在一个函数中,在Bridge中是封装在Director::Construct函数中,因为装配不同部分的过程是一致的,而在Bridge模式中则是封装在Abstraction::Operation函数中,在这个函数中调用对应的Implementor::OperationImpl函数.就两个模式而言,Builder封装了不同的生成组成部分的方式,而Bridge封装了不同的实现方式.

因此,如果以一些最基本的面向对象的设计原则来分析这些模式的实现的话,还是可以看到很多共同的地方的.

实现:
1)Bridge.h
/**/ /********************************************************************
    created:    2006/07/20
    filename:     Brige.h
    author:        李创
                http://www.cppblog.com/converse/

    purpose:    Brige模式的演示代码
*********************************************************************/


#ifndef BRIDEG_H
#define  BRIDEG_H

class  Implementor;

//  维护一个Implementor类的指针
class  Abstraction
{
public:
    Abstraction(Implementor* pImplementor);
    virtual ~Abstraction();

    void Operation();

protected:
    Implementor* m_pImplementor;
}
;

//  为实现Abstraction定义的抽象基类,定义了实现的接口函数
class  Implementor
{
public:
    Implementor(){}
    virtual ~Implementor(){}

    virtual void OperationImpl() = 0;
}
;

//  继承自Implementor,是Implementor的不同实现之一
class  ConcreateImplementorA
    :  public  Implementor
{
public:
    ConcreateImplementorA(){}
    virtual ~ConcreateImplementorA(){}

    virtual void OperationImpl();
}
;

//  继承自Implementor,是Implementor的不同实现之一
class  ConcreateImplementorB
    :  public  Implementor
{
public:
    ConcreateImplementorB(){}
    virtual ~ConcreateImplementorB(){}

    virtual void OperationImpl();
}
;

#endif

2)Bridge.cpp
/**/ /********************************************************************
    created:    2006/07/20
    filename:     Brige.cpp
    author:        李创
                http://www.cppblog.com/converse/

    purpose:    Brige模式的演示代码
*********************************************************************/


#include  " Brige.h "
#include  < iostream >

void  ConcreateImplementorA::OperationImpl()
{
    std::cout << "Implementation by ConcreateImplementorA/n";
}


void  ConcreateImplementorB::OperationImpl()
{
    std::cout << "Implementation by ConcreateImplementorB/n";
}


Abstraction::Abstraction(Implementor *  pImplementor)
    : m_pImplementor(pImplementor)
{
}


Abstraction:: ~ Abstraction()
{
    delete m_pImplementor;
    m_pImplementor = NULL;
}


void  Abstraction::Operation()
{
    m_pImplementor->OperationImpl();
}

3)Main.cpp
/**/ /********************************************************************
    created:    2006/07/20
    filename:     Main.cpp
    author:        李创
                http://www.cppblog.com/converse/

    purpose:    Bridge模式的测试代码
*********************************************************************/


#include  " Brige.h "
#include  < stdlib.h >

int  main()
{
    ConcreateImplementorA *pImplA = new ConcreateImplementorA();
    Abstraction *pAbstraction1 = new Abstraction(pImplA);
    pAbstraction1->Operation();

    ConcreateImplementorB *pImplB = new ConcreateImplementorB();
    Abstraction *pAbstraction2 = new Abstraction(pImplB);
    pAbstraction2->Operation();

    delete pAbstraction1;
    delete pAbstraction2;

    system("pause");

    return 0;
}

抽象调用与实现分离。实现部分可以单独进行更新。

【开源电机驱动】H 桥驱动-硬件篇 H-Bridge Drivers H 桥驱动程序 Introduction 引言 In theprevious installmentof the series we’ve gone through the high-level design decisions that you have to make when designing an H-Bridge, and we’ve discussed the considerations for selecting the MOSFETs a.. 阅读详情

相关推荐

九齐NY8B062F单片机:12位ADC与4路PWM在智能家居控制中的实战应用

本文详细介绍了九齐NY8B062F单片机在智能家居控制中的实战应用,重点解析其12位ADC高精度传感器数据采集和4路PWM精准驱动技术。通过实际案例展示如何利用该单片机实现温湿度监测、灯光调节及电机控制,并分享低功耗设计与抗干扰方案,为低成本高可靠性的智能家居设备开发提供完整解决方案。

rnn9storyteller的博客 731

桥接模式(Bridge)

桥接模式的定义与特点 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。 桥接(Bridge)模式的优点是: 由于抽象与实现分离,所以扩展能力强; 其实现细节对客户透明。 缺点是:由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,这增加了系统的理解与设计难度。 桥接模...

心猿意碼 8751

蠕虫病毒代码(纯属参考,请勿用于非法事件)

1.介绍蠕虫病毒 蠕虫病毒是一种常见的计算机病毒,是无须计算机使用者干预即可运行的独立程序,它通过不停的获得网络中存在漏洞的计算机上的部分或全部控制权来进行传播。 计算机病毒是指编制或者在计算机程序中插入的破坏计算机功能或者破坏数据和恶意篡改系统. 影响计算机使用并且能够自我复制的一组计算机指令或者程序代码 中文名:蠕虫病毒 传染方式:网络和电子邮件 外文名:Worm virus 类型:计算机病毒 2.代码(建议使用虚拟机,否则你的计算机将会就地报废,使用时要关闭电脑病毒保护,否则程序会...

Kenny20211105的博客 2万+

arduino代码_纯纯小白开发arduino--我的调试经验

arduino 是什么我就不做介绍了。这里的小白并不是说我没有嵌入式开发经验而是说从来没有实际开发过arduino。虽然它在世界范围内都很流行,可是不知为何国内专业做嵌入式开发的人对它大多都嗤之以鼻。我对arduino的想法是:”不管黑猫白猫,抓到老鼠就是好猫!“。只要能够完成功能就可以。言归正传:在网上买了一块ttgo生产的 ESP32墨水屏开发板 。从github下载资料,发现它们提供的源码是...

weixin_39572764的博客 815

新手避坑指南:用Silvaco Atlas搞定GaN HEMT电热仿真的完整流程(附代码解读)

本文详细介绍了使用Silvaco Atlas进行GaN HEMT电热特性仿真的完整流程,特别针对新手常见问题提供避坑指南。从软件环境配置、结构定义、网格划分到物理模型设置,逐步解析关键步骤,并附有代码解读和调试技巧,帮助读者快速掌握GaN器件仿真的核心技术。

weixin_29215815的博客 597

距离多普勒谱(RD谱)绘制方法及理解

RD谱是信号处理领域常用的图形。原始信号往往是一维时域序列,如何将其二维化,并进行变换生成RD谱呢?由于刚刚接触,查阅了网络上、老师手里的资料,发现RD谱的绘制方法并不统一,有些存在一定问题。在此,将心得体会记录下来。

mddh_123的博客 3万+

设计模式C++学习笔记之十一(Bridge桥梁模式)

桥梁模式,将抽象部分与它的实现部分分离,使它们都可以独立地变化。实现分离的办法就是增加一个类, 11.1.解释 main(),客户 IProduct,产品接口 CHouse,房子 CIPod,ipod CClothes,服装 CNewCorp,桥梁类,MakeMoney()是桥梁方法 CNewHouseCorp,只能生产房子,所以构造函数是CHouse* CShanZhaiC...

weixin_30894389的博客 256

永磁同步电机高效标定技术:从理论到实践的全面解析

本文全面解析永磁同步电机高效标定技术,从MTPA标定、弱磁区优化到初始角校准,详细介绍了理论原理和实战技巧。针对新能源汽车应用场景,提供标定系统集成要点和AI辅助优化方案,帮助工程师提升电机性能标定效率与精度。

weixin_28452161的博客 503

DesignPattern之Bridge

《JAVA与模式》之桥梁模式 在阎宏博士的《JAVA与模式》一书中开头是这样描述桥梁(Bridge)模式的:   桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。 桥梁模式的用意   桥梁模式

EckoTan的专栏 765

LeRobot X-VLA:首个适用于任意机器人、任意任务的软提示机器人基础模型

X-VLA是一种基于软提示的视觉-语言-动作模型,通过可学习嵌入向量编码不同机器人配置,实现跨平台统一控制。该框架采用两阶段训练:先在29万次多平台任务中学习通用策略,再通过微调少量参数(仅1%)适配新机器人。实验表明,0.9B参数的X-VLA在6个仿真和3个真实平台上表现优异,如LIBERO任务达93%成功率,布料折叠任务100%完成。其核心创新是将硬件差异视为"任务",用软提示引导Transformer处理异构数据,为机器人基础模型提供可扩展方案。

2506_90492529的博客 1241

成功解决raise Py4JError py4j.protocol.Py4JError: py4j.protocol.Py4JError: Could not find py4j jar at 

成功解决raise Py4JError("Could not find py4j jar at {0}".format(jarpath)) py4j.protocol.Py4JError: Could not find py4j jar at 目录 解决问题 解决思路 解决方法 1、第一步安装jdk 2、第二步安装或升级py4j 解决问题 raise Py4JError("Could not find py4j jar at {0...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 4627

设计模式之Bridge模式

本文内容是通过学习《设计模式解析》 by - Alan Shalloway, James R. Trott 一书所总结的心得。博主想通过先提出问题,再解决问题的方式来让读者实际体验一把Bridge模式的优势。(这也是《设计模式解析》一书中采用的讲解流程,对于读者理解会有很大帮助)文中的案例也是使用的书中提供的案例。1.提出问题先看需求:有两个绘制实例D1和D2,它们都提供了drawLine和draw

javine的专栏 1273

【Bug已解决】[Bug]: ValueError: No user query found in messages QWEN 3.5 27B VLLM 0.16.0 NIGHTLY 解决方案

用 vLLM 0.16.0 nightly 给发聊天请求时,服务端在处理消息时抛ValueError,请求失败。

博客 411

设计模式---桥连模式(DesignPattern_Bridge)

DesignPattern_Bridge 摘录自:设计模式与游戏完美开发 十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏...

su9257的博客 130

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

23种设计模式之Bridge模式

23种设计模式之Bridge模式 简单的Bridge模式实现: https://github.com/ConfuseCat/DesignPattern/tree/master/src/SeparateConsideration/BridgeMode Bridge模式中的角色 Bridge的作用是在“类的功能层次结构”和“类的实现层次结构”之间搭建桥梁。 类的功能层次结构:希望添加新功能时:父类具有...

Confused_Tom_Cat的博客 406

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Design Pattern: Bridge 模式

Bridge模式定义 :将抽象和行为划分开来,各自独立,但能动态的结合。 任何事物对象都有抽象和行为之分,例如人,人是一种抽象,人分男人和女人等;人有行为,行为也有各种具体表现,所以,“人”与“人的行为”两个概念也反映了抽象和行为之分。 在面向对象设计的基本概念中,对象这个概念实际是由属性和行为两个部分组成的,属性我们可以认为是一种静止的,是一种抽象,一般情况下,行为是包含在一个对象中,但是,...

Chinaxxren 137

Design Pattern Bridge 桥设计模式

桥设计模式其实就是一个简单的has a relationship,就是一个类拥有另一个类,并使用另一个类实现需要的功能。 比如遥控器和电视之间可以使用桥设计模式达到可以使用同一个遥控器控制多台电视机的目的。 这样的设计思想是多种设计模式反反复复使用基本思想。 仔细思考下会发现多种设计模式的底层思想其实是相通的,不过具体实现或者某些细节,应用等有那么一点差别罢了。 下面就实现一个TV和rem

靖空间 1660

设计模式07 之Bridge

设计模式07 之Bridge 1. “单一职责” 模式: .在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任。 典型模式 Decorator(装饰模式) Bridge(桥模式) 2. Bridge 桥模式 1. 动机(Motivation) 由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个纬度的变化。 如何应对这种“多维度的变化”?如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方

ネロ・クラウディウス 672

【设计模式无难事】——Bridge模式

【设计模式无难事】——Bridge模式 一、意图 桥接模式,顾名思义,这里有一个“桥”。。。 为什么需要一个“桥”呢? 我们用它来连接什么呢? 下面先看一个例子 二、例子 需求场景 在游戏中,玩家使用武器砍怪时,战斗的特效的实现 武器:宝剑、铁锤 特效:吸魂、回旋飞 分析&实作 桥接模式实现 1,所有的特效都包括:激活,运用,消失。于是我们定义一个特效接口 Ench

zzy_801011的博客 325

设计模式13——Bridge设计模式

Bridge桥接设计模式是将一组功能(实现)与另一组使用该功能的其他对象(行为)分离开来,以便达到单一因素变化,然后使用对象调用的方式将这两组关联系起来,将问题的行为和实现分离开来实现,通过用聚合代替继承来解决子类爆炸性增长的问题。 Bridge桥接设计模式结构如下: 还是以画图为例演示Bridge桥接设计模式,例子代码如下: //行为 interface Shape{ pub

Tony Chen的专栏 1913

C++ Bridge 设计模式

C++ Bridge 设计模式

Legend(谭海燕)的专栏 4451

设计模式之Bridge

Bridge设计模式是一个非常有用的设计模式,也是比较复杂的设计模式,比较符合java中面向接口编程的思想,Bridge设计模式的主要作用就是将抽象和实现部分实现解耦。 为什么叫桥接模式,我的理解就是将抽象这部分放置到桥的一头,将实现部分放置到桥的另一头,任何一头发生什么改变,都不会影响另一边,其实在JDBC中就是采用了Bridge的思想,jdbc是sun公司定义的一套接口,不同的数据库公司分别

Android学习之旅 1588

Bridge设计模式

Bridge设计模式:分离抽象和具体,然后抽象部分可以按照自己的继承树来发展;同样具体部分也可以按照自己的继承树来发展;最后用聚合方式(桥)连接抽象和具体。

AlbenXie的博客 190
上一篇: 设计模式之 adapt
下一篇: 设计模式之 composite
Not_Plain
博客等级 码龄17年 23粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值