桥接模式(C++)

定义

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

使用场景

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

结构

在这里插入图片描述

代码示例

//Bridge.h
/****************************************************/
#ifndef BRIDGE_H
#define BRIDGE_H
#include<iostream>
using namespace std;//创建桥接实现接口drawapi。
class drawapi
{
public:drawapi() {};virtual ~drawapi() {};virtual void drawcircle(int radius,int x,int y)=0;};//创建实现了DrawAPI接口的实体桥接实现类redcircle。
class redcircle:drawapi
{
public:redcircle() {};virtual ~redcircle() {};void drawcircle(int radius, int x, int y) { cout << "color: red " << "sadius: " << radius << " x: " << x << " y: " << y << endl; };
};//创建实现了DrawAPI接口的实体桥接实现类greencircle。
class greencircle :drawapi
{
public:greencircle() {};virtual ~greencircle() {};void drawcircle(int radius, int x, int y) { cout << "color: green " << "sadius: " << radius << " x: " << x << " y: " << y << endl; };
};//使用DrawAPI接口创建抽象类Shape。
class shape
{
public:shape() {};virtual ~shape() { delete mdrawapi; mdrawapi = NULL; };virtual void draw()=0;protected:drawapi *mdrawapi;
};//创建实现了Shape接口的实体类circle。
class circle :shape
{
public:circle(int tx, int ty, int tradius, drawapi *tdrawapi) { mdrawapi = tdrawapi; x = tx; y = ty; radius = tradius; };~circle() {};void draw() { mdrawapi->drawcircle(radius,x,y); };
private:int x;int y;int radius;
};#endif
//test.cpp
/****************************************************/
#include <iostream>
#include <string>
#include "Bridge.h"
int main()
{shape *t1 = (shape*)new circle(100, 100, 10, (drawapi*)new redcircle());shape *t2 = (shape*)new circle(35, 74, 10, (drawapi*)new greencircle());t1->draw();t2->draw();delete t1;t1 = NULL;delete t2;t2 = NULL;return 0;
}

运行结果
在这里插入图片描述

要点总结

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

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

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

相关文章

HDFS中的sequence file

sequence file序列化文件 介绍优缺点格式未压缩格式基于record压缩格式基于block压缩格式 介绍 sequence file是hadoop提供的一种二进制文件存储格式一条数据称之为record&#xff08;记录&#xff09;&#xff0c;底层直接以<key, value>键值对形式序列化到文件中 优…

【积水成渊】CSS磨砂玻璃效果和渐变主题色文字

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 lqj_本人_python人工智能视觉&#xff08;opencv&#xff09;从入门到实战,前端,微信小程序-CSDN博客 最新的uniapp毕业设计专栏也放在下方了&#xff1a; https://blog.csdn.net/lbcyllqj/category_12346639.html?spm1…

【腾讯云Cloud Studio实战训练营】React 快速构建点餐页面

前言&#xff1a; Cloud Studio是一个在线的云集成开发环境&#xff08;IDE&#xff09;&#xff0c;可以让开发人员在浏览器中轻松地开发、测试、调试和部署应用程序。它提供了基于云的计算资源和工具&#xff0c;例如代码编辑器、编译器、调试器、版本控制系统和项目管理工具…

代码随想录算法训练营day27 | 39. 组合总和,40. 组合总和 II,131. 分割回文串

目录 39. 组合总和 40. 组合总和 II 131. 分割回文串 39. 组合总和 难度&#xff1a;medium 类型&#xff1a;回溯 思路&#xff1a; 这道题的特点是&#xff0c;组合没有元素个数要求&#xff0c;数组无重复元素&#xff0c;每个元素可以无限选取。 组合没有元素个数要求…

【Mysql】数据库基础与基本操作

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

HttpRunner搭建接口自动化测试项目

前言&#xff1a;前面写过一篇PytestAllure接口自动化测试框架搭建的博客&#xff0c;这篇博客学习另外一款优秀的开源的接口自动化测试框架&#xff1a;HttpRunner&#xff0c;本博客主要学习如何搭建基于HttpRunner的接口自动化测试项目 PytestAllure接口自动化测试框架搭建…

uniapp实现自定义导航内容高度居中(兼容APP端以及小程序端与胶囊对齐)

①效果图如下 1.小程序端与胶囊对齐 2.APP端内容区域居中 注意&#xff1a;上面使用的是colorui里面的自定义导航样式。 ②思路&#xff1a; 1.APP端和小程序端走不同的方法&#xff0c;因为小程序端要计算不同屏幕下右侧胶囊的高度。 2.其次最重要的要清晰App端和小程序端…

这50幅画让你看清世界真相,犀利深刻,值得一读!

让你看清这个世界的真相&#xff01; 01 自弃者扶不起 自强者打不倒 02 人人都活在假象里 03 宁可有病再治&#xff0c;也不愿意未雨绸缪 04 一个人成熟的表现 是具备了太极思维 05 最大的监狱是人的思维监狱 06 认知太浅&#xff0c;放弃学习 这就是焦虑和绝望的根本原因 0…

GPT-4助力数据分析:提升效率与洞察力的未来关键技术 | 京东云技术团队

摘要 随着大数据时代的到来&#xff0c;数据分析已经成为企业和组织的核心竞争力。然而&#xff0c;传统的数据分析方法往往无法满足日益增长的数据分析需求的数量和复杂性。在这种背景下&#xff0c;ChatGPT-4作为一种先进的自然语言处理技术&#xff0c;为数据分析带来了革命…

DevExpress WinForms Gantt组件——轻松可视化项目时间表内的时间轴

DevExpress WinForms的Gantt组件在v23.1中附带了一个新的时间轴UI元素&#xff0c;Gantt&#xff08;甘特图&#xff09;控件本身允许您计划/管理项目&#xff0c;而时间轴显示单个任务的开始和截止日期&#xff0c;并提供项目进度的鸟瞰图。 DevExpress WinForms 拥有180组件和…

如何使用Audition生成固定频率的正弦波

一&#xff0c;简介 本文主要介绍如何使用Audition软件生成固定频率的正弦波进行相关测试验证工作。 二&#xff0c;准备工作 需要安装Audition软件&#xff0c;本次使用的是Adobe Audition CC 2018绿色版。其他版本也都可以&#xff0c;只是步骤上可能有细微的差别。 三&…

GDB 打印uint64位数据值

今天一来组长就让我查一个问题&#xff0c;说是我们的接口返回的数据需要赋值为-1&#xff0c;返回给上层调用。结果我一看代码&#xff0c;代码里就是写死了赋值 -1 的&#xff0c;但他说实际返回的好像不是 -1&#xff0c;所以只能让我gdb 跟踪一下了。本来想用 window 下的计…