C++设计模式——Bridge模式(上)

news/2024/2/21 3:33:53

一、什么是桥接模式

桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分和实现部分解耦,使得它们可以独立地变化。该模式使用了组合关系来替代继承,从而达到降低系统复杂度的目的。C++作为一门面向对象的编程语言,自然也可以使用桥接模式来解决相关问题。在本篇文章中,我们将会详细介绍C++桥接模式的实现原理,以及如何使用该模式来优化代码结构和可维护性。

二、桥接模式的定义与组成结构

桥接模式(Bridge Pattern)定义了如何将抽象和实现分离,以便两者可以独立地变化。桥接模式通常使用组合关系而不是继承关系来完成此任务。桥接模式包含四个部分:抽象部分(Abstraction)、实现部分(Implementor)、扩展抽象部分(Refined Abstraction)和具体实现部分(Concrete Implementor)。

三、桥接模式实现的步骤

在使用桥接模式时,通常需要按照以下步骤进行实现:
1、定义抽象部分的接口,并将其与实现部分的接口解耦。
2、定义实现部分的接口,并实现其具体实现。
3、在抽象部分中包含一个指向实现部分的指针,并在实现部分中包含一个指向抽象部分的指针。
4、定义扩展抽象部分,并在其中调用实现部分的接口。
5、定义具体实现部分,并实现其具体实现。
6、在客户端代码中创建抽象部分的对象,并通过传递具体实现部分的对象来设置实现部分的指针。
7、调用抽象部分的接口,实现具体的功能。

四、代码示例

#include <iostream>
using namespace std;class Implementor;/*** @brief The Abstraction class* 抽象类,持有实现类指针*/
class Abstraction
{
public:Abstraction(Implementor* pImpl):m_pImpl(pImpl){}virtual ~Abstraction(){}virtual void operation() = 0;
protected:Implementor* m_pImpl;
};/*** @brief The Implementor class* 定义了实现部分的接口,可以是抽象类或者一个接口类*/
class Implementor
{
public:virtual ~Implementor() {}virtual void OperationImpl() = 0;
};/*** @brief The RefinedAbstraction class  定义抽象拓展部分,并在其中调用实现部分的接口*/
class RefinedAbstraction : public Abstraction
{
public:RefinedAbstraction(Implementor* pImpl) : Abstraction(pImpl) {}virtual void operation() override{ m_pImpl->OperationImpl(); }
};/*** @brief The ConcreteImplementorA class 实现具体的部分*/
class ConcreteImplementorA : public Implementor
{
public:virtual void OperationImpl(){// 实现部分A的具体实现cout << __FUNCTION__ << endl;}
};class ConcreteImplementorB : public Implementor
{
public:virtual void OperationImpl(){// 实现部分B的具体实现cout << __FUNCTION__ << endl;}
};int main()
{Implementor* pImpl = new ConcreteImplementorA();Abstraction* abs = new RefinedAbstraction(pImpl);abs->operation();return 0;
}

五、总结

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

1、当需要避免由于实现部分和抽象部分的紧耦合关系而导致系统的维护和扩展变得困难时,可以使用桥接模式。例如,一个大型系统中有多个平台和多个应用程序,需要将它们组合起来实现特定的功能,此时就可以使用桥接模式将平台和应用程序解耦。

2、当需要在多个对象之间共享一些通用功能时,可以使用桥接模式。例如,在一个多媒体应用程序中,需要在不同的媒体之间共享一些通用的功能,比如播放、暂停、停止等,此时就可以使用桥接模式来实现共享。

3、当需要在运行时动态地切换实现部分时,可以使用桥接模式。例如,在一个视频播放器中,需要支持多种视频格式,用户可以在运行时选择不同的格式,此时就可以使用桥接模式来实现动态切换。


https://www.xjx100.cn/news/3118859.html

相关文章

鸿蒙(HarmonyOS)应用开发——基础组件

组件 组件化是一种将复杂的前端应用程序分解成小的、独立的部分的方法。这些部分被称为组件&#xff0c;它们可以重复使用&#xff0c;可以与其他组件组合使用以创建更复杂的组件&#xff0c;并且它们有自己的生命周期和状态。 组件化的目的是提高开发效率和代码重用率&#…

iOS NSDate的常用API

目录 一、创建日期 1.获取当前时间 2.当前时间指定秒数之后/前的时间 3.指定日期之后/后的时间 4.2001年之后/前指定秒数的时间 5.1970年之后/后指定秒数的时间 二、初始化日期 1.init 2.时间间指定秒数的时间 3.指定时间指定秒数之前/后的时间 4.2001年指定秒数之后…

面试篇之微服务(一)

目录 概览 1.什么是微服务&#xff1f; 2.微服务带来了哪些挑战&#xff1f; 3.现在有哪些流行的微服务解决方案&#xff1f; 这三种方案有什么区别吗&#xff1f; 4.说下微服务有哪些组件&#xff1f; 注册中心 5.注册中心是用来干什么的&#xff1f; 6.SpringCloud可…

管理Android12系统的WLAN热点

大家好!我是编码小哥,欢迎关注,持续分享更多实用的编程经验和开发技巧,共同进步。 要创建一个APK管理Android 12系统的WLAN热点,你需要遵循以下步骤: 1. 获取必要的权限和API访问权限。在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:…

WPF制作雷达扫描效果

前言 要实现该功能,我们就不得不先了解一下WPF里面的RenderTransform RenderTransform(渲染变换) <Border Height="100" Width="100" Background="Red"

wvp如果确认音频udp端口开放成功

用到工具 在服务器上开启端口监听 选中udp server&#xff0c;点击创建按钮 设置服务器监听端口 在客户端连接服务器端口 选中udp客户端&#xff0c;点击创建 输入服务器地址 远程端口和本地端口&#xff0c;本地端口只要没被占用都可以使用 &#xff0c;点击确认 发送数据 …

蓝桥杯第199题 扫地机器人 暴力优化 二分法 简单题 C++

题目 扫地机器人 - 蓝桥云课 (lanqiao.cn)https://www.lanqiao.cn/problems/199/learning/?page1&first_category_id1&name%E6%89%AB%E5%9C%B0%E6%9C%BA%E5%99%A8%E4%BA%BA 思路和解题方法 首先&#xff0c;通过cin语句输入了终点位置n和障碍物数量k。使用一个数组a来…

mac安装homebrew/brew遇到443

文章目录 问题描述解决方法方法一方法二 参考文献 问题描述 brew 全称Homebrew 是Mac OSX上的软件包管理工具 想在mac终端安装&#xff0c;运行网上提供的指令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)&quo…