桥接模式(Bridge Pattern)

embedded/2024/12/25 11:06:27/

桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分实现部分分离,使它们可以独立变化。它的核心思想是通过引入一个“桥”类,将抽象层与实现层解耦。


桥接模式的结构

  • Abstraction(抽象部分)
    定义高层的抽象接口,提供公共的方法声明。

  • Implementor(实现接口部分)
    定义实现部分的接口,一般是抽象类或接口。

  • ConcreteImplementor(具体实现部分)
    实现具体的逻辑,继承自 Implementor

  • RefinedAbstraction(扩展抽象部分)
    扩展或细化抽象部分的逻辑。

桥接模式的核心是通过 "组合" 而非 "继承" 将抽象部分与实现部分关联。


桥接模式的代码示例

示例场景:不同平台上的视频播放器

我们创建一个桥接模式,处理跨平台的多种视频播放器:

  1. 抽象出一个播放器的抽象类 VideoPlayer
  2. 提供具体的实现部分接口 Platform
  3. 通过桥接的方式组合它们。

示例代码
 

cpp

#include <iostream>
#include <memory>
#include <string>using namespace std;// Implementor:定义实现接口
class Platform {
public:virtual ~Platform() = default;virtual void playVideo(const string& video) = 0;
};// ConcreteImplementorA:Windows 实现
class WindowsPlatform : public Platform {
public:void playVideo(const string& video) override {cout << "Playing video on Windows: " << video << endl;}
};// ConcreteImplementorB:Linux 实现
class LinuxPlatform : public Platform {
public:void playVideo(const string& video) override {cout << "Playing video on Linux: " << video << endl;}
};// Abstraction:播放器抽象接口
class VideoPlayer {
protected:shared_ptr<Platform> platform; // 桥接到具体实现的接口public:explicit VideoPlayer(shared_ptr<Platform> p) : platform(std::move(p)) {}virtual ~VideoPlayer() = default;virtual void play(const string& video) = 0;
};// RefinedAbstraction:高级播放器
class AdvancedPlayer : public VideoPlayer {
public:explicit AdvancedPlayer(shared_ptr<Platform> p) : VideoPlayer(std::move(p)) {}void play(const string& video) override {cout << "AdvancedPlayer: Preparing video..." << endl;platform->playVideo(video); // 调用桥接的具体实现cout << "AdvancedPlayer: Finished playing video." << endl;}
};// RefinedAbstraction:普通播放器
class SimplePlayer : public VideoPlayer {
public:explicit SimplePlayer(shared_ptr<Platform> p) : VideoPlayer(std::move(p)) {}void play(const string& video) override {cout << "SimplePlayer: ";platform->playVideo(video); // 调用桥接的具体实现}
};// 客户端代码
int main() {// 创建具体实现:Windows 平台shared_ptr<Platform> windows = make_shared<WindowsPlatform>();// 创建具体实现:Linux 平台shared_ptr<Platform> linux = make_shared<LinuxPlatform>();// 使用不同实现创建播放器VideoPlayer* player1 = new AdvancedPlayer(windows);VideoPlayer* player2 = new SimplePlayer(linux);// 播放视频player1->play("movie.mp4");player2->play("song.mp4");// 释放资源delete player1;delete player2;return 0;
}

输出结果
 
AdvancedPlayer: Preparing video...
Playing video on Windows: movie.mp4
AdvancedPlayer: Finished playing video.
SimplePlayer: Playing video on Linux: song.mp4

桥接模式的分析

  1. 角色分离

    • 抽象层VideoPlayer 提供一个统一的高层接口。
    • 实现层Platform 定义跨平台的实现接口。
  2. 灵活性

    • 平台层(Windows/Linux)和播放器层(Simple/Advanced)可以独立扩展,相互解耦。
  3. 桥接点

    • VideoPlayerPlatform 通过组合关联而不是继承。

桥接模式与 Android 图形栈的关系

在 Android 图形栈中,类似的桥接模式如下:

  • 抽象层:高层使用的 IGraphicBufferProducer
  • 实现层:具体硬件或系统服务提供的 HAL 实现。
  • 桥接点:B2HGraphicBufferProducer 将两个层次桥接,帮助实现抽象和具体逻辑的解耦。

http://www.ppmy.cn/embedded/148595.html

相关文章

Vue前端开发-Pinia模块安装与配置

Pinia 是Vue2中Vuex的升级版&#xff0c;与Vuex的功能一样&#xff0c;都是存储Vue中的共享状态&#xff0c;但它比Vuex的使用更加简单&#xff0c;所有状态逻辑的改变都被封装至action 中&#xff0c;支持多个Store对象管理&#xff0c;热模块更换&#xff0c;在不刷新页面情况…

Amazon Bedrock Claude 3 在客户服务自动化中的应用方法

随着企业对客户体验的重视&#xff0c;客户服务自动化已成为提升效率和满意度的重要手段。Amazon Bedrock中的Claude 3模型&#xff0c;凭借其强大的自然语言处理能力&#xff0c;成为了客户服务自动化的理想选择。以下是九河云总结的一些具体的方法&#xff0c;展示如何利用Cl…

研发效能DevOps: Vite 使用 Element Plus

目录 一、实验 1.环境 2.初始化前端项目 3.安装 vue-route 4.安装 pinia 5.安装 axios 6.安装 Element Plus 7.gitee创建工程 8. 配置路由映射 9.Vite 使用 Element Plus 二、问题 1.README.md 文档推送到gitee未自动换行 2.访问login页面显示空白 3.表单输入账户…

为什么通过调制可以扩宽信号的带宽,可以提高系统的抗干扰能力?

调制技术在通信系统中的应用不仅能够有效传输信息&#xff0c;还可以扩宽信号的带宽并提高系统的抗干扰能力。这些特性使得调制成为现代通信系统不可或缺的一部分。目前市场的信号源基本都具有多种类型的调制功能&#xff0c;例如RIGOL的DG922Pro支持AM、FM、PM、ASK/FSK/PSK、…

C++ 模板是为了解决啥问题

模板是 C 的一种强大特性&#xff0c;它主要解决了 代码复用 和 类型安全 问题。模板允许在编译时生成具有不同类型的代码&#xff0c;从而使得代码可以适用于多种类型&#xff0c;而不需要重复编写类似的代码。 具体来说&#xff0c;模板解决了以下几个问题&#xff1a; 代码…

Django 模板分割及多语言支持案例【需求文档】-->【实现方案】

Django 模板分割及多语言支持案例 这个案例旨在提供一个清晰的示范&#xff0c;展示如何将复杂的页面分解为多个可复用的模板组件&#xff0c;使代码更加模块化和易于管理。希望这篇案例文章对你有所帮助。 概述 在 Django 项目开发中&#xff0c;使用模板分割和多语言支持能…

【可视化开源性能压测工具】小巧而强大的oha

oha是一款小巧而强大的测试工具&#xff0c;使用Rust语言编写&#xff0c;依托tokio和ratatui库&#xff0c;实现了高效且美观的测试界面。它可用于向Web应用发送负载&#xff0c;并实时显示带有TUI&#xff08;Text User Interface&#xff09;动画的测试结果。这款工具受到了…

【C++学习篇】AVL树

目录 1.AVL树的概念 2.AVL树的实现 2.1AVL树的结构 2.2AVL树的插入 2.2.1 AVL树插⼊⼀个值的⼤概过程 2.2.2平衡因子的更新 2.2.3 插⼊结点及更新平衡因⼦的代码实现 ​编辑 2.3旋转 2.3.1旋转的原则 2.3.2 右单旋 2.3.3左右双旋 2.3.4 右左双旋 1.AVL树的概念 1…