2023-6-16-第七式桥接模式

news2024/11/18 3:34:27


🍿*★,°*:.☆( ̄▽ ̄)/$:*.°★* 🍿

💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥
💟💟喜欢的朋友可以关注一下,下次更新不迷路💟💟
😆😆😆私聊获取个人订阅号哦,欢迎订阅共同学习😆😆😆
💖💖💖💖可以加入大家庭群聊,一起学习天天有福利💖💖💖💖





🍬本文摘要

在这里插入图片描述
设计方法二十三式之桥接模式


目录

  • 🍬本文摘要
  • 😉一、基础概念
  • 🐱‍🐉二、桥接模式实现
  • 🎉三、模块之间的关系
  • 🐱‍🚀四、注意事项
  • 🎂五、使用场景
  • 🍳参考文献
  • 🧊文章总结



😉一、基础概念

桥接模式是一种结构型设计模式,它的目的是将一个大类或一系列紧密相关的类拆分成抽象和实现两个独立的层次结构,从而能够在这两个层次之间进行更加灵活的组合和扩展。具体来说,桥接模式通过引入一个抽象层次结构来隔离一个类的接口和实现,并允许它们各自独立地变化,从而实现了更加灵活和可扩展的设计。

在桥接模式中,抽象层次结构定义了一个抽象接口,它是一组独立于具体实现的操作。而实现层次结构则实现了这些操作,并负责具体的实现细节。通过将这两个层次结构分离,桥接模式使得它们能够独立地变化,并且能够在运行时动态地组合和扩展。这使得桥接模式非常适合需要支持多种平台或多种实现的系统。


🐱‍🐉二、桥接模式实现

在C++中实现桥接模式,可以使用抽象基类和具体实现类来分别定义抽象和实现层次结构,然后使用抽象基类的指针来引用具体实现类的对象。具体实现类可以继承自抽象基类,从而实现抽象接口并提供具体的实现。

以下是一个简单的C++桥接模式示例:

// 抽象基类
class Shape {
public:
    virtual void draw() = 0;
};

// 具体实现类1
class Circle : public Shape {
public:
    void draw() {
        // 实现细节
    }
};

// 具体实现类2
class Square : public Shape {
public:
    void draw() {
        // 实现细节
    }
};

// 抽象基类的指针引用具体实现类的对象
int main() {
    Shape* shape = new Circle();
    shape->draw();
    delete shape;

    shape = new Square();
    shape->draw();
    delete shape;

    return 0;
}

在上面的示例中,Shape是抽象基类,Circle和Square是具体实现类。通过抽象基类的指针shape来引用具体实现类的对象,实现了抽象和实现的分离。在运行时,可以动态地改变shape所指向的对象,从而实现了更加灵活和可扩展的设计。


🎉三、模块之间的关系

在桥接模式中,有两个独立的层次结构,即抽象层次结构和实现层次结构。这两个层次结构之间是通过抽象基类和具体实现类之间的继承关系来建立联系的。

具体来说,抽象基类定义了一组抽象接口,它是一组独立于具体实现的操作。而具体实现类则实现了这些抽象接口,并负责具体的实现细节。在运行时,抽象基类的指针可以引用具体实现类的对象,从而实现了抽象和实现的分离。

在模块之间的关系方面,桥接模式可以帮助我们实现松耦合的设计。抽象层次结构和实现层次结构是独立的,它们可以分别由不同的开发人员或团队来设计和实现。这样可以避免模块之间的紧密耦合,从而提高了系统的可维护性和可扩展性。

此外,桥接模式还可以支持多种平台或多种实现的系统。通过使用不同的具体实现类,可以在运行时动态地切换实现,从而实现更加灵活和可扩展的设计。


🐱‍🚀四、注意事项

在使用桥接模式时需要注意以下几点:

  1. 抽象层次结构和实现层次结构应该是独立的,并且应该通过抽象基类和具体实现类之间的继承关系来建立联系。

  2. 抽象层次结构定义了一组抽象接口,它是一组独立于具体实现的操作。具体实现类则实现了这些抽象接口,并负责具体的实现细节。

  3. 在运行时,抽象基类的指针可以引用具体实现类的对象,从而实现了抽象和实现的分离。

  4. 桥接模式可以帮助我们实现松耦合的设计,从而提高系统的可维护性和可扩展性。

  5. 桥接模式还可以支持多种平台或多种实现的系统。通过使用不同的具体实现类,可以在运行时动态地切换实现,从而实现更加灵活和可扩展的设计。

  6. 在使用桥接模式时,需要避免出现过多的抽象层次结构和具体实现类,否则会增加系统的复杂性。

  7. 桥接模式适用于需要支持多种平台或多种实现的系统,如果系统只需要支持一种平台或一种实现,可能会过度设计,增加系统的复杂性。


🎂五、使用场景

桥接模式适用于以下场景:

  1. 当一个类需要在多个平台或多个实现之间切换时,可以使用桥接模式来实现平台或实现的分离,从而实现更加灵活和可扩展的设计。

  2. 当一个类有多个变化因素时,可以使用桥接模式来分离这些变化因素,从而使得它们能够独立地变化,而不会相互影响。

  3. 当一个类需要在运行时动态地切换实现时,可以使用桥接模式来实现实现的动态切换,从而实现更加灵活和可扩展的设计。

  4. 当一个类的实现细节对客户端代码是透明的时,可以使用桥接模式来隐藏实现细节,从而提高系统的安全性和可维护性。

  5. 当一个类的实现细节可能会发生变化时,可以使用桥接模式来将实现细节和抽象接口分离,从而使得变化对客户端代码的影响最小化。

总之,桥接模式适用于需要支持多种平台或多种实现的系统,或者需要分离多个变化因素的系统。通过使用桥接模式,可以实现更加灵活和可扩展的设计,提高系统的可维护性和可扩展性。


🍳参考文献

🧊文章总结

提示:这里对文章进行总结:

   本文讲了关于桥接模式的一些内容






更多好文推荐

🍸2021-4月Python 机器学习——中文新闻文本标题分类
🍹2021年4月-(计算机网络)小型校园网络模拟搭建,最全最准确版
🍺2022-10-31-基于用户的协同过滤推荐算法实现+MAE+RMSE
🍻2022-11-28-大数据可视化,特征维度大于50
🥂2023-3-9-一篇简短的文章把C++左右值关系讲的透透彻彻

上一篇
End
下一篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/654559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

外包能转正吗?外包员工能变正式员工吗?

外包员工能变正式员工吗?这里辟谣一波,许多外包都说有转正机会。实际情况是几乎等于零。其中,三方外包更是可以直接和零划等号。三方外包的转正,往往就是给个内推机会,然后和面试官会熟悉一些。 然而这些都没什么价值…

【SpringCloud入门】-- 初识Eureka注册中心

目录 1.SpringCloudEureka简介 2.什么是CAP原则? 3.注册中心的概念? 4.SpringCloud其他注册中心 5.搭建Eureka注册中心 6.eureka的配置(主要是server,instance,client) 7.eureka集群概念 8.eureka集群搭建 1.SpringCloudE…

Unity 之 使用后处理的方式实现暗角效果

Unity 之 后处理URP工程实现边角压暗效果 一,URP工程配置二,代码调用三,实现原理 一,URP工程配置 在Hierarchy界面,创建空物体 GameObject,右键选择Volume菜单下的Global Volume。 创建后的结果&#xff1…

ahut 月赛1

心得: 一点一点理解,对于一段要学习的代码,跟着写下来,理解一点写一点 对于一道题目,用记事本,看题目,看一句题目,用自己的话概括一句,写在记事本上,并将自己的 想法一…

在JavaScript中的数据结构(链表)

文章目录 链表是什么?链表的好处详细的看一下列表单向链表实操链表向链表尾部追加元素从链表中移除元素根据元素的值移除元素在任意位置插入元素查找链表是否有改元素检查链表是否为空检查链表的长度查看链表头元素把LinkedList对象转换成一个字符串打印链表元素 双…

盖雅「劳动力账户」:制造业全面工时成本管理利器

制造业是国民经济的重要支柱之一,也是国家实体经济发展的重点。随着国际竞争加剧,制造业企业需要不断优化和提升生产效率、降低成本,并保证产品的质量和可靠性。 在这过程中,制造业企业需要寻找新的技术与方法,挖掘生…

saltstack草稿

salt [options] <target> <module.function> [arguments] salt的自建函数&#xff1a; salt * test.rand_sleep 120 salt/salt/modules/test.py 这个是salt自带的包 salt * disk.usage salt -G ipv4:192.168.50.12 cmd.run ls -l /home salt * grain…

微服务开发系列 第九篇:OAuth2

总概 A、技术栈 开发语言&#xff1a;Java 1.8数据库&#xff1a;MySQL、Redis、MongoDB、Elasticsearch微服务框架&#xff1a;Spring Cloud Alibaba微服务网关&#xff1a;Spring Cloud Gateway服务注册和配置中心&#xff1a;Nacos分布式事务&#xff1a;Seata链路追踪框架…

CSS查缺补漏之《说一说CSS3有哪些新特性?》

面试时经常会被用到你了解CSS3新特性嘛&#xff0c;针对此问题&#xff0c;特整理如下~ 背景相关 background-size&#xff1a;用于设置背景图的尺寸 可选属性值有 length、percentage、cover、contain、auto length用长度值规定背景图片大小&#xff0c;若有两值&#xff0c;…

阿里云无影云电脑使用教程(3分钟新手指南)

​阿里云无影云电脑即无影云桌面&#xff0c;云桌面如何使用&#xff1f;云电脑创建后没有用户名和密码&#xff0c;先创建用户设置密码&#xff0c;才可以登录连接到云桌面。云桌面想要访问公网还需要开通互联网访问功能。阿里云百科来详细说下阿里云无影云电脑从选择、创建用…

项目管理,如何做到流程标准化?

项目管理如何做到刘春标准化&#xff1f;要想做好项目管理&#xff0c;可以借助于信息化工具&#xff0c;从以下方面入手&#xff1a; 1.明确目标 在项目管理中&#xff0c;确定团队的目标是非常重要的。团队需要制定一个清晰、可衡量的目标&#xff0c;以便能够全力以赴地实…

sqlserver------数据库的存储过程(练习)

对于数据库的存储过程之前的专题有讲过 这里具体讲述存储过程的编写方法&#xff1a; 例题&#xff1a;有heat表和eatables两张表&#xff0c;分别为&#xff1a; eatables heat&#xff1a;protein&#xff08;蛋白质&#xff09;&#xff0c;fat&#xff08;脂肪&#xff…

【计算机网络自顶向下】如何学好计网-第四章网络层

第四章 网络层 学习目的&#xff1a; 理解网络层服务的主要原理 网络岑服务模型转发&#xff08;forwarding&#xff09;和路由&#xff08;routing&#xff09;的概念对比路由器的工作原理路由算法及路由协议 完成简单的组网及IP地址和路由配置 4.1 引言 网络层提供的功能…

前端vue自定义简单实用下拉筛选 下拉菜单

前端vue自定义简单实用下拉筛选 下拉菜单, 下载完整代码请访问: https://ext.dcloud.net.cn/plugin?id13020 效果图如下: #### 使用方法 使用方法 <!-- titleArr: 选择项数组 dropArr: 下拉项数组 finishDropClick: 下拉筛选完成事件--> <ccDropDownMenu :titleA…

解密Prompt系列3. 冻结LM微调Prompt: Prefix-tuning Prompt-tuning P-tuning

这一章我们介绍在下游任务微调中固定LM参数&#xff0c;只微调Prompt的相关模型。这类模型的优势很直观就是微调的参数量小&#xff0c;能大幅降低LLM的微调参数量&#xff0c;是轻量级的微调替代品。和前两章微调LM和全部冻结的prompt模板相比&#xff0c;微调Prompt范式最大的…

21. 算法之动态规划

1. 概念 动态规划(Dynamic Programming)&#xff0c;是一种分阶段求解的方法。动态规划算法是通过拆分问题&#xff0c;定义问题状态和状态之间的关系&#xff0c;使得问题能够以递推&#xff08;或者说分治&#xff09; 的方式去解决。 首先是拆分问题&#xff0c;就是根据问…

生产报工软件怎么选?一定要看这几点,值得收藏!

生产报工软件怎么选&#xff1f; 适合项目型企业&#xff0c;支持移动端报工&#xff1b;可以进行工时上报、工时统计、人力成本核算&#xff1b;满足中大型企业需求。 题主的要求可以说非常具有代表性了&#xff0c;今天我们就来看一看如何寻找到这样的报工系统。 一、为什…

Alibaba Cloud Linux安装Nginx以及常用命令

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装C编译器&#xff0c;以及所需要的库二、下载和安装PCRE三.Ngxin相关命令 总结 前言 提示&#xff1a;系统是Alibaba Cloud Linux 3.2104 LTS 64位&…

批量更新状态功能在设备巡检、人员管理、工序流转等场景的应用

二维码已被应用在了各式各样的场景中&#xff0c;譬如教育培训、会议签到、产品展示等等。其中有很多场景需要一次性运用到大量的二维码&#xff0c;如人员管理、工序流转、设备巡检等&#xff0c;可以使用批量添加记录功能使工作效率近一步提升。 原先为一批二维码添加记录时…

dubbo3 Cluster wrapper初始化及extensionloader分析

从以下代码&#xff0c;可以看到dubbo默认的服务是failover SPI("failover") public interface Cluster {String DEFAULT "failover";Adaptive<T> Invoker<T> join(Directory<T> directory, boolean buildFilterChain) throws RpcExce…