c++设计模式之桥接模式(拼接组合)

桥接模式:就是进行拼接组装
在这里插入图片描述
应用举例:
1.定义了形状,抽象形状接口,圆,矩形
2.定义了颜色,抽象颜色接口,红色,蓝色
3,怎么桥接,抽象具体形状和具体颜色的组合,蓝色矩形,红色圆

1.形状

#include <iostream>
#include <string>// 抽象部分:形状接口
class Shape {
public:virtual void draw() = 0; // 纯虚函数,需要子类实现
};// 具体实现:圆形
class Circle : public Shape {
public:void draw() override {std::cout << "Drawing Circle" << std::endl;}
};// 具体实现:矩形
class Rectangle : public Shape {
public:void draw() override {std::cout << "Drawing Rectangle" << std::endl;}
};

2.颜色

// 抽象部分:颜色接口
class Color {
public:virtual void fill() = 0; // 纯虚函数,需要子类实现
};// 具体实现:红色
class Red : public Color {
public:void fill() override {std::cout << "Filling with Red color" << std::endl;}
};// 具体实现:蓝色
class Blue : public Color {
public:void fill() override {std::cout << "Filling with Blue color" << std::endl;}
};

3.桥接部分

// 桥接部分:具体形状和具体颜色的组合
class BridgeShape {
protected:Shape* shape;Color* color;public:BridgeShape(Shape* shape, Color* color) : shape(shape), color(color) {}void drawAndFill() {shape->draw();color->fill();}
};// 具体桥接实现:红色圆形
class RedCircle : public BridgeShape {
public:RedCircle() : BridgeShape(new Circle(), new Red()) {}
};// 具体桥接实现:蓝色矩形
class BlueRectangle : public BridgeShape {
public:BlueRectangle() : BridgeShape(new Rectangle(), new Blue()) {}
};

运行一下

int main() {RedCircle redCircle;BlueRectangle blueRectangle;redCircle.drawAndFill();blueRectangle.drawAndFill();return 0;
}

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

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

相关文章

Elasticsearch集群部署(Linux)

1. 准备环境 这里准备三台Linux虚拟机&#xff0c;用于配置Elasticsearch集群和部署可视化工具Kibana。 角色IP域名集群名称节点名称版本操作系统ES192.168.243.100linux100cluster-eses-node-1007.12.0CentOS 7192.168.243.101linux101cluster-eses-node-101192.168.243.102…

Prompt Engineering,提示工程

什么是提示工程&#xff1f; 提示工程也叫【指令工程】。 Prompt发送给大模型的指令。比如[讲个笑话]、[用Python编个贪吃蛇游戏]、[给男/女朋友写情书]等看起来简单&#xff0c;但上手简单精通难 [Propmpt]是AGI时代的[编程语言][Propmpt]是AGI时代的[软件工程][提示工程]是…

使用Pycharm运行spark实例时没有pyspark包(ModuleNotFoundError: No module named ‘py4j‘)

一、问题描述 在安装并配置pyspark&#xff0c;下载并打开Pycharm&#xff08;专业版&#xff09;后进行spark实例操作&#xff08;笔者以统计文件中的行数为例&#xff09;时&#xff0c;运行程序后提示ModuleNotFoundError: No module named py4j&#xff1a; 二、解决办法 …

WPF4 数据模板

数据模板 数据模板常用在3种类型的控件, 下图形式: 1.Grid这种列表表格中修改Cell的数据格式, CellTemplate可以修改单元格的展示数据的方式。 2.针对列表类型的控件, 例如树形控件&#xff0c;下拉列表&#xff0c;列表控件, 可以修改其中的ItemTemplate。 3.修改ContentT…

线性代数 --- 矩阵的对角化以及矩阵的n次幂

矩阵的对角化以及矩阵的n次幂 &#xff08;特征向量与特征值的应用&#xff09; 前言&#xff1a; 在上一篇文章中&#xff0c;我记录了学习矩阵的特征向量和特征值的学习笔记&#xff0c;所关注的是那些矩阵A作用于向量x后&#xff0c;方向不发生改变的x(仅有尺度的缩放)。线…

FPGA“题目周周练”活动来啦!

Hi&#xff0c;各位编程精英er~ 不知道大家的FPGA学习之旅到达哪一个阶段了呢&#xff1f;又在这个过程中遇到了哪些困惑&#xff1f; 作为一门高度专业化且充满挑战的技术&#xff0c;FPGA的学习是一场不断思考、认知、持续深化的过程。在这个过程中&#xff0c;思维的敏捷和…

springcloud Ribbon的详解

1、Ribbon是什么 Ribbon是Netflix发布的开源项目&#xff0c;Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的框架。 2、Ribbon能干什么 LB负载均衡(Load Balance)是什么&#xff1f;简单的说就是将用户的请求平摊的分配到多个服务上&#xff0c;从而达…

Day26: Redis入门、开发点赞功能、开发我收到的赞的功能、重构点赞功能、开发关注、取消关注、开发关注列表、粉丝列表、重构登录功能

Redis入门 简介 Redis是NoSQL数据库&#xff08;Not only SQL&#xff09;值支持多种数据结构&#xff08;key都是string&#xff09;&#xff1a;字符串、哈希、列表、集合、有序集合把数据存在内存中&#xff0c;速度惊人&#xff1b;同时也可以讲数据快照&#xff08;数据…

GPT与GAN结合生成图像——VQGAN原理解析

1、前言 这篇文章&#xff0c;我们讲VQ_GAN&#xff0c;这是一个将特征向量离散化的模型&#xff0c;其效果相当不错&#xff0c;搭配Transformer&#xff08;GPT&#xff09;或者CLIP使用&#xff0c;达到的效果在当时可谓是令人拍案叫绝&#xff01; 原论文&#xff1a;Tam…

比特币成长的代价

作者&#xff1a;Jeffrey Tucker&#xff0c;作家和总裁。曾就经济、技术、社会哲学和文化等话题广泛发表演讲。编译&#xff1a;秦晋 2017 年之后参与比特币市场的人遇到了与之前的人不同的操作和理想。如今&#xff0c;没有人会太在意之前的事情&#xff0c;说的是 2010-2016…

jmeter之连接MySQL数据库

jmeter连接mysql数据库 mysql官网下载地址&#xff1a;MySQL :: Download Connector/J 步骤如下&#xff1a; 1、下载mysql的jar包放入到jmeter的lib/ext下&#xff0c;然后重启jmeter 链接: https://pan.baidu.com/s/1rRrMQKnEuKz8zOUfMdMHFg?pwdawfc 提取码: awfc 2、配置…

HarmonyOS应用性能分析工具CPU Profiler的使用指南

简介 本文档介绍应用性能分析工具CPU Profiler的使用方法&#xff0c;该工具为开发者提供性能采样分析手段&#xff0c;可在不插桩情况下获取调用栈上各层函数的执行时间&#xff0c;并展示在时间轴上。 开发者可通过该工具查看TS/JS代码及NAPI代码执行过程中的时序及耗时情况…