设计模式五:桥模式(Bridge Pattern)

桥模式是一种结构型设计模式,它将抽象部分与其实现部分分离,使它们可以独立变化。这种模式通过提供桥梁结构将抽象和实现解耦。

桥模式的结构

桥模式包含以下主要角色:

  1. Abstraction(抽象类):定义抽象接口,维护一个指向Implementor的指针

  2. RefinedAbstraction(扩充抽象类):扩展Abstraction定义的接口

  3. Implementor(实现类接口):定义实现类的接口

  4. ConcreteImplementor(具体实现类):实现Implementor接口

桥模式的优点

  • 分离抽象接口及其实现部分

  • 提高可扩展性,可以独立扩展抽象和实现部分

  • 实现细节对客户端透明

C++ 桥模式实现示例

#include <iostream>
#include <string>// 实现类接口
class Implementor {
public:virtual ~Implementor() {}virtual std::string operationImpl() const = 0;
};// 具体实现类A
class ConcreteImplementorA : public Implementor {
public:std::string operationImpl() const override {return "ConcreteImplementorA: Here's the result on platform A.\n";}
};// 具体实现类B
class ConcreteImplementorB : public Implementor {
public:std::string operationImpl() const override {return "ConcreteImplementorB: Here's the result on platform B.\n";}
};// 抽象类
class Abstraction {
protected:Implementor* implementor_;public:Abstraction(Implementor* implementor) : implementor_(implementor) {}virtual ~Abstraction() {}virtual std::string operation() const {return "Abstraction: Base operation with:\n" + implementor_->operationImpl();}
};// 扩充抽象类
class ExtendedAbstraction : public Abstraction {
public:ExtendedAbstraction(Implementor* implementor) : Abstraction(implementor) {}std::string operation() const override {return "ExtendedAbstraction: Extended operation with:\n" + implementor_->operationImpl();}
};// 客户端代码
void ClientCode(const Abstraction& abstraction) {std::cout << abstraction.operation();
}int main() {Implementor* implementorA = new ConcreteImplementorA;Abstraction* abstraction = new Abstraction(implementorA);ClientCode(*abstraction);std::cout << "\n";Implementor* implementorB = new ConcreteImplementorB;Abstraction* extendedAbstraction = new ExtendedAbstraction(implementorB);ClientCode(*extendedAbstraction);delete implementorA;delete implementorB;delete abstraction;delete extendedAbstraction;return 0;
}

输出示例

Abstraction: Base operation with:
ConcreteImplementorA: Here's the result on platform A.ExtendedAbstraction: Extended operation with:
ConcreteImplementorB: Here's the result on platform B.

UML结构图 

桥模式的应用场景

  1. 当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时

  2. 当需要避免在抽象和实现之间形成永久绑定时

  3. 当需要在运行时切换不同的实现时

桥模式在GUI开发、驱动程序开发等领域有广泛应用,例如不同操作系统下的窗口实现

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

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

相关文章

深入理解设计模式之模板模式:优雅地定义算法骨架

在软件开发中&#xff0c;我们经常会遇到这样的情况&#xff1a;多个类执行相似的操作流程&#xff0c;但每个类在流程的某些步骤上有自己特定的实现。如果为每个类都完整地编写整个流程&#xff0c;会导致大量重复代码&#xff0c;且难以维护。这时候&#xff0c;模板模式&…

基于单片机宠物喂食器/智能宠物窝/智能饲养

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目速选一览表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目功能速览 概述 深夜加班时&#xff0c;你是否担心家中宠物饿肚子&#xff1f;出差旅途中&#xff0c;是否焦虑宠…

静态补丁脚本 - 修改 libtolua.so

直接改arm64的so&#xff0c; 使用python脚本。#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 静态补丁脚本 - 修改 libtolua.so 主要功能&#xff1a; 1. 修改 luaL_loadbuffer 函数&#xff0c;将跳转目标从 luaL_loadbufferx 改为 luaL_loadfilex 2. …

2-大语言模型—理论基础:详解Transformer架构的实现(2)

目录 1-大语言模型—理论基础&#xff1a;详解Transformer架构的实现(1)-CSDN博客https://blog.csdn.net/wh1236666/article/details/149443139?spm1001.2014.3001.5502 2.3、残差连接和层归一化 2.3.1、什么是层归一化&#xff1f; 2.3.2、层归一化的核心特点&#xff08…

SmartX 用户建云实践|富士康:基于榫卯企业云平台构建分布式云,支撑全球多地工厂重要产线

作为全球最大的电子科技智造服务商&#xff0c;富士康集团在全球范围内构建生产制造网络。为实现多厂区统一管理与降本增效&#xff0c;在逐步替代 VMware 虚拟化架构的过程中&#xff0c;富士康对比了自研 OpenStack Ceph 平台和 SmartX 超融合方案&#xff0c;最终选择基于 …

ADC选型设计

1、最大摆伏FSR&#xff1a; 0 ~ 4.096V&#xff0c;一般Vref要等于FSR 2、最大频率&#xff1a;根据奈奎斯特采样定理大于2倍的信号频率才够还原信号&#xff0c;所以选择20/50倍更好&#xff0c; 3、最小精度&#xff0c;对于一给定模拟输入&#xff0c;实际数字输出与理论预…

基于深度学习的火灾智能检测系统设计与实现

在各类安全事故中&#xff0c;火灾因其突发性强、破坏力大&#xff0c;一直是威胁人们生命财产安全的重大隐患。传统的火灾检测方式多依赖烟雾传感器、温度传感器等&#xff0c;存在响应滞后、易受环境干扰等问题。随着深度学习技术的飞速发展&#xff0c;基于计算机视觉的火灾…

HIVE实战处理(二十四)留存用户数

留存概念: 次X日活跃留存&#xff0c;次X日新增留存&#xff0c;也就是看今天的新增或活跃用户在后续几天的留存情况一、留存表的生成逻辑 因为用户活跃日期和留存的日期无法对齐所以搞了2级分区&#xff08;dt,static_day&#xff09; 1&#xff09;首先获得计算日D、根据要出…

W3C XHTML 活动:标准化的未来与交互式体验

W3C XHTML 活动:标准化的未来与交互式体验 概述 W3C(World Wide Web Consortium)是全球领先的互联网技术标准制定组织。XHTML,作为W3C推荐的标准之一,是一种基于XML的标记语言,旨在提供一个更加结构化、兼容性和可扩展性更高的网页内容表示方式。本文将围绕W3C的XHTML活…

Java-数构链表

1.链表 1.1链表的概念和结构 链表是一种物理存储结构上非连续存储结构&#xff0c;数据元素的逻辑顺序是通过链表中引用链接次序实现的。 这里大多讨论无头单向非循环链表。这种结构&#xff0c;结构简单&#xff0c;一般与其他数据结构结合&#xff0c;作为其他数据结构的子…

Windows系统软件游戏丢失找不到mgmtapi.dll修复解决方法

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

初识C++——开启新旅途

从今天开始主包也是掉入C这个深坑&#xff0c;上完课也是跟没上一样&#xff0c;所以写好博客复习还是很重要的&#xff0c;话不多说&#xff0c;进入正题~~1、命名空间(1)namespace的价值与作用在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变…

vue2 面试题及详细答案150道(141 - 150)

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

第十三章 Go包管理

文章目录使用logurs处理程序日志logrus 常用配置使用viper处理程序配置使用logurs处理程序日志 下载包&#xff0c;在终端执行命令 go get github.com/sirupsen/logrus官方示例 package mainimport (log "github.com/sirupsen/logrus" )func main() {log.WithFiel…

EP01:【Python 第一弹】基础入门知识

一、基础入门知识 1.1 代码规范 1.1.1 语句分隔符 ; 换行 1.1.2 格式化 对 Windows 和 Linux 操作系统&#xff0c;快捷键是Ctrl Alt L对 macOS 操作系统&#xff0c;快捷键是Cmd Option L 1.1.3 注释 单行注释 # 这是一行注释多行注释 """ 这 是 …

实用的文件和文件夹批量重命名工具

在日常工作中&#xff0c;文件和文件夹的命名管理常常让人头疼。尤其是面对大量文件时&#xff0c;手动重命名不仅耗时&#xff0c;还容易出错。今天&#xff0c;我要给大家推荐一款超级实用的工具——OncePower 文件批量重命名&#xff0c;它不仅能批量重命名文件和文件夹&…

【Git】报错:git config --global http.sslBackend “openssl“

问题解决 报错&#xff1a;git config --global http.sslBackend “openssl”解决方法&#xff1a; git config --global http.sslBackend "openssl"之后再 push 即可正常提交。 &#x1f50d; 原因分析 ​​系统环境不支持 OpenSSL 后端​​ Git 在某些平台&#xf…

Redisson RLocalCachedMap 核心参详解

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

AI辅助编程时代的高效规范开发指南:工具、原则与提效策略

引言&#xff1a;AI辅助编程的时代背景与核心挑战 人工智能在编程领域的应用虽可追溯至20世纪50年代&#xff0c;但近十年实现了革命性突破&#xff0c;推动其从早期的代码补全工具演进为能理解上下文、生成完整函数乃至项目架构的智能系统。关键发展里程碑包括&#xff1a;20…

百度网盘TV版1.21.0 |支持倍速播放,大屏云看片

百度网盘TV版是专为智能电视设计的应用程序&#xff0c;让用户可以直接在大屏幕上观看保存在云端的视频资源。此应用提供了与手机端几乎相同的功能&#xff0c;包括倍速播放功能&#xff0c;使得用户可以更方便地享受高清视频内容。无需繁琐的操作步骤&#xff0c;即可实现云端…