返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++设计模式中的桥模式你了解吗
  • 955
分享到

C++设计模式中的桥模式你了解吗

2024-04-02 19:04:59 955人浏览 泡泡鱼
摘要

目录单一职责模式:典型模式Bridge动机(Motivation)模式定义结构要点总结cpp总结单一职责模式: 在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着

单一职责模式:

在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任。

典型模式

  • Decorator
  • Bridge

Bridge

动机(Motivation)

  • 由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个纬度的变化。
  • 如何应对这种“多维度的变化”?如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂度?

模式定义

将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。

结构

在这里插入图片描述

要点总结

  • Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固 有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。所谓抽象和实现沿着各自纬度的变化,即“子类化”它们。
  • Bridge模式有时候类似于多继承方案,但是多继承方案往往违背 单一职责原则(即一个类只有一个变化的原因),复用性比较差。Bridge模式是比多继承方案更好的解决方法。
  • Bridge模式的应用一般在“两个非常强的变化维度”,有时一个 类也有多于两个的变化维度,这时可以使用Bridge的扩展模式。

cpp

class Messager {
public:
    virtual void Login(string username, string passWord) = 0;
    virtual void SendMessage(string message) = 0;
    virtual void SendPicture(Image image) = 0;
    virtual void PlaySound() = 0;
    virtual void DrawShape() = 0;
    virtual void WriteText() = 0;
    virtual void Connect() = 0;
    virtual ~Messager() {}
};
//平台实现
class PCMessagerBase : public Messager {
public:
    virtual void PlaySound() {
        //**********
    }
    virtual void DrawShape() {
        //**********
    }
    virtual void WriteText() {
        //**********
    }
    virtual void Connect() {
        //**********
    }
};
class MobileMessagerBase : public Messager {
public:
    virtual void PlaySound() {
        //==========
    }
    virtual void DrawShape() {
        //==========
    }
    virtual void WriteText() {
        //==========
    }
    virtual void Connect() {
        //==========
    }
};
//业务抽象
class PCMessagerLite : public PCMessagerBase {
public:
    virtual void Login(string username, string password) {
        PCMessagerBase::Connect();
        //........
    }
    virtual void SendMessage(string message) {
        PCMessagerBase::WriteText();
        //........
    }
    virtual void SendPicture(Image image) {
        PCMessagerBase::DrawShape();
        //........
    }
};
class PCMessagerPerfect : public PCMessagerBase {
public:
    virtual void Login(string username, string password) {
        PCMessagerBase::PlaySound();
        //********
        PCMessagerBase::Connect();
        //........
    }
    virtual void SendMessage(string message) {
        PCMessagerBase::PlaySound();
        //********
        PCMessagerBase::WriteText();
        //........
    }
    virtual void SendPicture(Image image) {
        PCMessagerBase::PlaySound();
        //********
        PCMessagerBase::DrawShape();
        //........
    }
};
class MobileMessagerLite : public MobileMessagerBase {
public:
    virtual void Login(string username, string password) {
        MobileMessagerBase::Connect();
        //........
    }
    virtual void SendMessage(string message) {
        MobileMessagerBase::WriteText();
        //........
    }
    virtual void SendPicture(Image image) {
        MobileMessagerBase::DrawShape();
        //........
    }
};
class MobileMessagerPerfect : public MobileMessagerBase {
public:
    virtual void Login(string username, string password) {
        MobileMessagerBase::PlaySound();
        //********
        MobileMessagerBase::Connect();
        //........
    }
    virtual void SendMessage(string message) {
        MobileMessagerBase::PlaySound();
        //********
        MobileMessagerBase::WriteText();
        //........
    }
    virtual void SendPicture(Image image) {
        MobileMessagerBase::PlaySound();
        //********
        MobileMessagerBase::DrawShape();
        //........
    }
};
void Process() {
    //编译时装配
    Messager* m = new MobileMessagerPerfect();
}
class Messager {
protected:
    MessagerImp* messagerImp;//...
public:
    virtual void Login(string username, string password) = 0;
    virtual void SendMessage(string message) = 0;
    virtual void SendPicture(Image image) = 0;
    virtual ~Messager() {}
};
class MessagerImp {
public:
    virtual void PlaySound() = 0;
    virtual void DrawShape() = 0;
    virtual void WriteText() = 0;
    virtual void Connect() = 0;
    virtual MessagerImp() {}
};
//平台实现 n
class PCMessagerImp : public MessagerImp {
public:
    virtual void PlaySound() {
        //**********
    }
    virtual void DrawShape() {
        //**********
    }
    virtual void WriteText() {
        //**********
    }
    virtual void Connect() {
        //**********
    }
};
class MobileMessagerImp : public MessagerImp {
public:
    virtual void PlaySound() {
        //==========
    }
    virtual void DrawShape() {
        //==========
    }
    virtual void WriteText() {
        //==========
    }
    virtual void Connect() {
        //==========
    }
};
//业务抽象 m
//类的数目:1+n+m
class MessagerLite :public Messager {
public:
    virtual void Login(string username, string password) {
        messagerImp->Connect();
        //........
    }
    virtual void SendMessage(string message) {
        messagerImp->WriteText();
        //........
    }
    virtual void SendPicture(Image image) {
        messagerImp->DrawShape();
        //........
    }
};
class MessagerPerfect :public Messager {
public:
    virtual void Login(string username, string password) {
        messagerImp->PlaySound();
        //********
        messagerImp->Connect();
        //........
    }
    virtual void SendMessage(string message) {
        messagerImp->PlaySound();
        //********
        messagerImp->WriteText();
        //........
    }
    virtual void SendPicture(Image image) {
        messagerImp->PlaySound();
        //********
        messagerImp->DrawShape();
        //........
    }
};
void Process() {
    //运行时装配
    MessagerImp* mImp = new PCMessagerImp();
    Messager* m = new Messager(mImp);
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!    

--结束END--

本文标题: C++设计模式中的桥模式你了解吗

本文链接: https://lsjlt.com/news/143213.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++设计模式中的桥模式你了解吗
    目录单一职责模式:典型模式Bridge动机(Motivation)模式定义结构要点总结cpp总结单一职责模式: 在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着...
    99+
    2024-04-02
  • Python设计模式中的状态模式你了解吗
    目录状态模式应用场景代码示例总结状态模式 状态模式,当对象的内部状态发生了改变的时候,允许对象执行不同的流程。 优点: 封装了状态转换规则。枚举了可能的状态,在枚举状态之前需要确定...
    99+
    2024-04-02
  • JAVA设计模式中的策略模式你了解吗
    目录策略模式策略模式是什么策略模式的使用场景策略模式实践总结策略模式 世界上本没有模式; 一些程序老鸟在长时间的编程工作总结出高效的代码写法被后世推崇; 并整理出固定的写法规范,这个...
    99+
    2024-04-02
  • C++设计模式中的桥模式是什么
    这篇文章主要介绍了C++设计模式中的桥模式是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。单一职责模式:在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是...
    99+
    2023-06-29
  • JAVA设计模式---原型模式你了解吗
    目录介绍角色Java语言提供的clone()方法代码演示—克隆羊结论深浅拷贝深浅拷贝探讨实现深克隆的方式一 : 手动对引用对象进行克隆实现深克隆的方式二 :序列化原型模式对单例模式的...
    99+
    2024-04-02
  • Java23种设计模式中的单例模式你了解吗
    目录1、定义2、适用场景3、常见写法4、如何防止单例被破坏1.多线程破坏单例以及解决方法2.反射破坏单例以及解决方法3.序列化破坏单例以及解决方法5、优缺点6、总结1、定义 单例模式...
    99+
    2024-04-02
  • 设计模式——桥接模式详解
    🚀桥接模式(抽象与实现分离) 1.1⭐桥接模式的定义 维基百科:桥接模式是软件设计模式中最复杂的模式之一,它把事物对象和其具体行为、具体特征分离开来,使它们可以各自独立的变化。 百度百...
    99+
    2023-10-11
    设计模式 桥接模式 java
  • Java设计模式中的桥接模式
    目录模式介绍UML类图桥接模式案例桥接模式的注意事项和细节常见的应用场景模式介绍 桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。是一种...
    99+
    2024-04-02
  • java设计模式--桥接模式详解
    目录引例桥接模式实战示例代码:总结引例 需求:对不同手机类型的不同品牌(比如按键手机:诺基亚、翻盖手机:纽曼、智能手机:华为、小米)实现操作编程(比如: 开机、关机、打电话)。 先来...
    99+
    2024-04-02
  • 如何理解设计模式之桥模式
    本篇内容介绍了“如何理解设计模式之桥模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!举个例子桥模式的主要...
    99+
    2024-04-02
  • 详解Java设计模式之桥接模式
    目录一、什么是桥接模式:二、UML结构图三、代码实现四、JDBC源码解析-桥接模式1、源码分析2、源码类3、对 JDBC 的观点一、什么是桥接模式: 桥接,顾名思义,就是用来连接两个...
    99+
    2024-04-02
  • 详解PHP设计模式之桥接模式
    目录简介适用场景优点缺点扩展案例代码抽象代码简介 桥接模式又叫桥梁模式,属于结构型模式。目的是将抽象与实现分离,使它们都可以独立的变化,解耦。继承有很多好处,但是会增加耦合,而桥接模...
    99+
    2022-12-20
    PHP桥接模式 PHP设计模式
  • Golang设计模式中的桥接模式详细讲解
    目录桥接模式概念示例桥接模式 桥接是一种结构型设计模式, 可将业务逻辑或一个大类拆分为不同的层次结构, 从而能独立地进行开发。 层次结构中的第一层 (通常称为抽象部分) 将包含对第二...
    99+
    2023-01-11
    Go桥接模式 Go设计模式
  • Java设计模式之桥接模式
    本文通过老王和小王买车,引出设计模式中的结构型设计之桥接模式,接着说明设计型模式的概念和代码实现,为了加深理解,会说明适配器设计模式在JDBC中的应用,最后谈谈桥接模式和适配器模式的...
    99+
    2024-04-02
  • 如何理解Java设计模式的桥接模式
    这篇文章主要讲解了“如何理解Java设计模式的桥接模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Java设计模式的桥接模式”吧!一、什么是桥接模式桥接模式(Bridge Patt...
    99+
    2023-06-25
  • Java设计模式之java桥接模式详解
    目录一、什么是桥接模式:二、UML结构图:三、代码实现:四、JDBC源码解析-桥接模式:1、源码分析:2、源码类图:3、对 JDBC 的观点:参考博客:总结一、什么是桥接模式: 桥接...
    99+
    2024-04-02
  • Python设计模式中的结构型桥接模式
    目录一、桥接模式二、应用场景三、代码示例一、桥接模式 桥接模式,希望能够将一个事物的两个维度分离(解耦),使其都可以独立地变化,并通过桥梁连接起来。 (类)抽象部分(Abstract...
    99+
    2024-04-02
  • Java设计模式之桥梁(Bridge)模式
    桥梁模式的结构 桥梁模式是对象的结构模式。 如上图所示,系统含有两个等级结构: 由抽象化角色和修正抽象化角色组成的抽象化等级结构。 由实现化角色和两个具体实现化角...
    99+
    2024-04-02
  • JavaScript设计模式中的桥接和中介者模式
    目录一、桥接设计模式桥接设计模式在工作中的使用二、JavaScript中介者模式生活中的中介者中介者设计模式案例业务中的中介者一、桥接设计模式 桥接设计模式是一种偏向于组合的设计模式...
    99+
    2024-04-02
  • Java设计模式之桥接模式的示例详解
    目录定义案例需求方案一方案二对比分析总结定义 桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是&ldquo...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作