设计模式:桥接器模式(C++实现)

桥接器模式(Bridge Pattern)是一种结构设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化。桥接器模式通常用于需要在多个维度上扩展和变化的情况下,将抽象和实现解耦。
以下是一个简单的C++桥接器模式的示例:

#include <iostream>// 实现接口
class Implementor
{
public:virtual void operationImpl() = 0;
};// 具体实现类A
class ConcreteImplementorA : public Implementor
{
public:void operationImpl() override{std::cout << "Concrete Implementor A operation" << std::endl;}
};// 具体实现类B
class ConcreteImplementorB : public Implementor
{
public:void operationImpl() override{std::cout << "Concrete Implementor B operation" << std::endl;}
};// 抽象类
class Abstraction
{
protected:Implementor *implementor;public:Abstraction(Implementor *implementor) : implementor(implementor) {}virtual void operation() = 0;
};// 扩展抽象类
class RefinedAbstraction : public Abstraction
{
private:std::string type;
public:RefinedAbstraction(Implementor *implementor, std::string type) : Abstraction(implementor), type(type) {}void operation() override{std::cout << "type: " << type << " ";implementor->operationImpl();}
};int main()
{Implementor *implementorA = new ConcreteImplementorA();Abstraction *abstractionA = new RefinedAbstraction(implementorA, "A");abstractionA->operation();abstractionA = new RefinedAbstraction(implementorA, "B");abstractionA->operation();delete implementorA;delete abstractionA;Implementor *implementorB = new ConcreteImplementorB();Abstraction *abstractionB = new RefinedAbstraction(implementorB, "C");abstractionB->operation();abstractionB = new RefinedAbstraction(implementorB, "D");abstractionB->operation();delete implementorB;delete abstractionB;return 0;
}

运行结果:

type: A Concrete Implementor A operation
type: B Concrete Implementor A operation
type: C Concrete Implementor B operation
type: D Concrete Implementor B operation

在上述示例中,Implementor是实现接口,定义了实现部分的操作方法。ConcreteImplementorA和ConcreteImplementorB是具体实现类,分别实现了实现接口的操作方法。Abstraction是抽象类,包含了一个实现接口的成员变量,并定义了抽象部分的操作方法。RefinedAbstraction是扩展抽象类,继承了抽象类,并实现了抽象部分的操作方法。
在main()函数中,首先创建了一个具体实现类ConcreteImplementorA的对象,并将其传递给扩展抽象类RefinedAbstraction的构造函数,创建了一个抽象类对象abstractionA。通过调用抽象类的operation()方法,实现了抽象部分的操作。然后,创建了一个具体实现类ConcreteImplementorB的对象,并将其传递给扩展抽象类RefinedAbstraction的构造函数,创建了另一个抽象类对象abstractionB。同样地,通过调用抽象类的operation()方法,实现了抽象部分的操作。
通过桥接器模式,可以将抽象部分与实现部分分离,使它们可以独立地变化。桥接器模式提供了更好的灵活性和可扩展性,可以在运行时动态地将不同的抽象部分和实现部分组合起来,而不影响彼此。

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

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

相关文章

使用Process Monitor工具探测日志文件是程序哪个模块生成的

目录 1、问题描述 2、使用Process Monitor监测目标文件是哪个模块生成的思路说明 3、操作Process Monitor监测日志文件是哪个模块生成的 4、通过screenctach.dll库的时间戳&#xff0c;找到其pdb文件&#xff0c;然后去查看详细的函数调用堆栈 5、最后 VC常用功能开发汇总…

用智能文字识别技术赋能古彝文数字化之路

目录 1、前言 2、对古彝文古籍的保护迫在眉睫 3、古彝文识别的难点问题 4、古彝文文字识别的关键技术 4.1、智能高清滤镜技术 4.2、图像矫正 4.3、图像增强 4.4、版面还原 5、合合信息识别技术赋能古彝文数字化 1、前言 古彝文指的是在云南、贵州、四川等地的彝族人之…

uniapp 可输入可选择的........框

安装 uniapp: uni-combox地址 vue页面 <uni-combox :border"false" input"selectname" focus"handleFocus" blur"handleBlur" :candidates"candidates" placeholder"请选择姓名" v-model"name"&g…

yolov5及yolov7实战之剪枝

之前有讲过一次yolov5的剪枝&#xff1a;yolov5实战之模型剪枝_yolov5模型剪枝-CSDN博客 当时基于的是比较老的yolov5版本&#xff0c;剪枝对整个训练代码的改动也比较多。最近发现一个比较好用的剪枝库&#xff0c;可以在不怎么改动原有训练代码的情况下&#xff0c;实现剪枝的…

使用自定义注解发布webservice服务

使用自定义注解发布webservice服务 概要代码自定义注解WebService接口服务发布配置使用 结果 概要 在springboot使用webservice&#xff0c;发布webservice服务的时候&#xff0c;我们经常需要手动在添加一些发布的代码&#xff0c;比如&#xff1a; Bean public Endpoint or…

破信息壁垒,亿发一站式ERP系统建设,打造五金制造信息管理平台

五金制造拥有明显的行业特征&#xff0c;如体量小、品种繁多、颜色多样、加工工艺不断演进等&#xff0c;呈现出一种独特的管理挑战。大多数五金企业仍然依赖人工管理和经验决策&#xff0c;如今需要寻求更合理和科学的决策方法&#xff0c;以实现生产、销售、仓储、采购和财务…

百度SEO优化技巧(选择、网站结构、内容优化、外链建设、数据分析)

百度关键词SEO优化介绍 SEO是搜索引擎优化的缩写&#xff0c;是指通过优化网站结构、内容和外部链接等方式&#xff0c;提高网站在搜索引擎中的排名&#xff0c;从而获取更多的访问量和流量。百度是中国最大的搜索引擎之一&#xff0c;对于企业来说&#xff0c;优化百度关键词…

uniapp 事件委托失败 获取不到dataset

问题&#xff1a; v-for 多个span ,绑定点击事件 代码:view里包着一个span, <view class"status-list" tap"search"><span class"status-item" v-for"(key,index) in statusList" :key"index" :data-key"k…

USB转换方案介绍

随着科技的不断发展&#xff0c;我们的生活中出现了越来越多的电子设备。然而&#xff0c;这些设备通常具有不同的连接端口和协议&#xff0c;这可能会使它们之间的连接变得困难。这时候&#xff0c;使用USB转换就成为了一种非常方便和实用的解决方法。 无论是在家庭、办公室还…

系统集成|第十章(笔记)

目录 第十章 质量管理10.1 项目质量管理概论10.2 主要过程10.2.1 规划质量管理10.2.2 实施质量保证10.2.3 质量控制 10.3 常见问题 上篇&#xff1a;第九章、成本管理 下篇&#xff1a;第十一章、人力资源管理 第十章 质量管理 10.1 项目质量管理概论 质量管理&#xff1a;指确…

创建型设计模式——工厂模式

摘要 本博文主要介绍软件设计模式中工厂模式&#xff0c;其中工厂设计模式的扩展为简单工厂(Simple Factory)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)三种。 一、简单工厂(Simple Factory) 主要分析设计模式 - 简单工厂(Simple Factory)&#xff0c;它把实例…

PHP8的类与对象的基本操作之类的实例化-PHP8知识详解

定义完类和方法后&#xff0c;并不是真正创建一个对象。类和对象可以描述为如下关系。类用来描述具有相同数据结构和特征的“一组对象”&#xff0c;“类”是“对象”的抽象&#xff0c;而“对象”是“类”的具体实例&#xff0c;即一个类中的对象具有相同的“型”&#xff0c;…

【DETR】

https://tianfeng.space/ 前言 论文 代码 DETR&#xff08;Data-efficient Image Transformer&#xff09;是一种用于目标检测任务的深度学习模型。它与传统的目标检测方法不同&#xff0c;采用了Transformer架构&#xff0c;将目标检测问题转化为一个序列到序列的问题。以下…

Java之IO流概述

1.1 什么是IO 生活中&#xff0c;你肯定经历过这样的场景。当你编辑一个文本文件&#xff0c;忘记了ctrls &#xff0c;可能文件就白白编辑了。当你电脑上插入一个U盘&#xff0c;可以把一个视频&#xff0c;拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢&#xff1f;键…

【数据库——MySQL】(10)视图和索引

目录 1. 视图1.1 创建视图1.2 查询视图 2. 索引2.1 索引的分类2.2 索引的建立 参考书籍 1. 视图 1.1 创建视图 基础语法&#xff1a; CREATE [OR REPLACE] VIEW 视图名[(列名表)]ASSELECT语句[WITH CHECK OPTION]说明&#xff1a; 在默认情况下&#xff0c;将在当前数据库创…

Linux 用户 用户组管理

用户 Linux系统是一个多用户多任务的分时操作系统&#xff0c;任何要使用系统资源的用户&#xff0c;都必须首先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统。每个用户账号都拥有一个唯一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后&a…

华为ICT——第二章-数字图像处理私人笔记

目录 1&#xff1a;计算机视觉&#xff1a;​编辑 2&#xff1a;计算机视觉应用&#xff1a;​编辑 3&#xff1a;计算机视界核心问题&#xff1a;​编辑 4&#xff1a;相关学科&#xff1a; 5&#xff1a;计算机视觉与人工智能&#xff1a; 最成熟的技术方向是图像识别 6…

【面试算法——动态规划 20】最长公共子序列 不相交的线

1143. 最长公共子序列 链接: 1143. 最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字…

Spring面试题8:面试官:说一说Spring的BeanFactory

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的BeanFactory Spring的BeanFactory是Spring框架的核心容器,负责管理和创建Bean对象。它是一个工厂类,用于实例化、配置和管理Bean的…

SpringBoot 如何使用 Druid 进行数据库连接池管理

使用 Druid 进行数据库连接池管理的 Spring Boot 应用 数据库连接池是任何Web应用程序的重要组成部分&#xff0c;它们有助于管理数据库连接的复用&#xff0c;提高性能和资源利用率。Druid是一个强大的数据库连接池&#xff0c;它具有监控、防SQL注入、快速、可扩展等特点。在…