当前位置: 首页 > news >正文

Composite Pattern

Composite Pattern

The intent of Composite pattern is to composite objects into tree structures to represent a “part-whole” hierarchy .The Composite Pattern allow clients to treat individual objects and composite objects uniformly.

UML

Used in Qt

Examples include the QObject hierarchy, QGraphicsItem and QGraphicsScene, and so on.

Some Codes:

1.Defining the Component Interface
#include <iostream>
#include <vector>
#include <memory>// Component (Base class)
class Graphic {
public:virtual ~Graphic() = default;// Pure virtual function for drawingvirtual void draw() const = 0;// Common operation like resizingvirtual void resize(double factor) = 0;
};
2. Defining the Leaf Classes
// Leaf (Concrete) classes
class Circle : public Graphic {
private:double x, y, radius;public:Circle(double x, double y, double radius) : x(x), y(y), radius(radius) {}void draw() const override {std::cout << "Drawing Circle at (" << x << ", " << y << ") with radius " << radius << std::endl;}void resize(double factor) override {radius *= factor;}
};class Square : public Graphic {
private:double sideLength;public:Square(double sideLength) : sideLength(sideLength) {}void draw() const override {std::cout << "Drawing Square with side length " << sideLength << std::endl;}void resize(double factor) override {sideLength *= factor;}
};
3、Defining the Composite Class
// Composite class
class CompositeGraphic : public Graphic {
private:std::vector<std::shared_ptr<Graphic>> children;public:// Add a child graphicvoid add(std::shared_ptr<Graphic> graphic) {children.push_back(graphic);}// Remove a child graphicvoid remove(std::shared_ptr<Graphic> graphic) {children.erase(std::remove(children.begin(), children.end(), graphic), children.end());}// Draw all childrenvoid draw() const override {for (const auto& child : children) {child->draw();  // Recursively draw all children}}// Resize all childrenvoid resize(double factor) override {for (const auto& child : children) {child->resize(factor);  // Recursively resize all children}}
};
4.Client Code
int main() {// Create some leaf objectsstd::shared_ptr<Graphic> circle1 = std::make_shared<Circle>(0.0, 0.0, 5.0);std::shared_ptr<Graphic> circle2 = std::make_shared<Circle>(2.0, 3.0, 3.0);std::shared_ptr<Graphic> square = std::make_shared<Square>(4.0);// Create a composite objectstd::shared_ptr<CompositeGraphic> compositeGraphic = std::make_shared<CompositeGraphic>();compositeGraphic->add(circle1);compositeGraphic->add(circle2);compositeGraphic->add(square);// Draw all graphics (including leaves and composites)std::cout << "Drawing the entire graphic collection:" << std::endl;compositeGraphic->draw();// Resize all graphics (including leaves and composites)compositeGraphic->resize(1.5);std::cout << "\nAfter resizing:" << std::endl;compositeGraphic->draw();return 0;
}

相关文章:

Composite Pattern

Composite Pattern The intent of Composite pattern is to composite objects into tree structures to represent a “part-whole” hierarchy .The Composite Pattern allow clients to treat individual objects and composite objects uniformly. UML Used in Qt Exam…...

Springboot MVC

1. Springboot为MVC提供的自动配置 Spring Boot 为 Spring MVC 提供了自动配置&#xff0c;这在大多数应用程序中都能很好地工作。除了已经实现了 Spring MVC 的默认功能外&#xff0c;自动配置还提供了以下特性&#xff1a; 包括 ContentNegotiatingViewResolver 和 BeanNam…...

MySQL数据表记录增操作

对数据库的操作用的最最频繁的呢,总结起来就四个字:增删改查! 查是属于DQL(Data QueryLanguage &#xff0c;数据查询语言)部分,而增、改、删属于DML&#xff08;Data Manipulation Language, 数据操纵语言&#xff09; 增&#xff1a;作用是往数据库的数据表里写入记录值 语…...

maven报错“找不到符号“

问题 springboot项目 maven编译打包过程&#xff0c;报错"找不到符号" 解决 很多网上方法都试过&#xff0c;都没用 换jdk&#xff0c;把17->21...

python进阶-05-利用Selenium来实现动态爬虫

python进阶-05-利用Selenium来实现动态爬虫 一.说明 这是python进阶部分05&#xff0c;我们上一篇文章学习了Scrapy来爬取网站&#xff0c;但是很多网站需要登录才能爬取有用的信息&#xff0c;或者网站的静态部分是一个空壳&#xff0c;内容是js动态加载的,或者人机验证&…...

P1226 【模板】快速幂

题目描述 给你三个整数 &#x1d44e;,&#x1d44f;,&#x1d45d;求 &#x1d44e;&#x1d44f; mod &#x1d45d; 输入格式 输入只有一行三个整数&#xff0c;分别代表 &#x1d44e;,&#x1d44f;,&#x1d45d; 输出格式 输出一行一个字符串 a^b mod ps&#xf…...

【C++】求第二大的数详细解析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述&#x1f4af;输入描述&#x1f4af;解题思路分析1. 题目核心要求2. 代码实现与解析3. 核心逻辑逐步解析定义并初始化变量遍历并处理输入数据更新最大值与次大值输…...

从零开始学TiDB(3)TiKV 持久化机制

如图&#xff0c;每个TiKV有两个rocksdb实例&#xff0c;rocksdbKV复制存储键值对&#xff0c;rocksdb raft负责存储复制的日志 。 每个region及其副本构成了raft group。这个OB的Zone其实有点类似&#xff0c;在OB中每个Unit及其副本构成了paxos组&#xff0c;在TiDB中叫raft…...

Elasticsearch+Kibana+IK分词器+拼音分词器安装

目录 ES报错 Kibanaik分词器拼音分词器 安装都比较简单&#xff0c;可以参考这几篇博客 ES 如何在 Linux&#xff0c;MacOS 及 Windows 上进行安装 Elasticsearch 报错 ES启动报错error downloading geoip database [GeoLite2-ASN.mmdb] Kibana KIBANA的安装教程&#xff…...

子网划分实例

看到有人问这个问题&#xff1a; 想了一下&#xff0c;这是一个子网划分的问题&#xff1a; 处理方法如图&#xff1a; 这是一个子网划分的问题 设备1用三层交换机&#xff0c;端口设置为路由模式&#xff0c;设备2和设备3为傻瓜交换机模式 设备2和设备3下挂设备都是26为掩码&…...

上海亚商投顾:创业板指震荡调整 机器人概念股再度爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日冲高回落&#xff0c;深成指、创业板指盘中跌超1%&#xff0c;尾盘跌幅有所收窄。机器人概念股逆势爆…...

【C++ 20进阶(2):初始化 Initializer

【C 20进阶&#xff08;2&#xff09;&#xff1a;初始化 Initializer】 原文&#xff1a;https://blog.csdn.net/weixin_44259356/article/details/144377955 引言 本篇文章为系列文章将着重介绍C20新特性&#xff0c;一是希望可以和大家交流分享&#xff0c;二是也便于自己…...

【重生之我在B站学MySQL】

MySQL笔记 文章目录 MySQL的三层结构SQL语句分类sql语句数据库操作创建数据库查看、删除数据库 表操作创建表mysql常用数据类型(列类型)查询表、插入值创建表练习创建一个员工表emp 修改表mysql约束primary key(主键)not null(非空)unique(唯一)foreign key(外键)check自增长 索…...

Python实现中国象棋

探索中国象棋 Python 代码实现&#xff1a;从规则逻辑到游戏呈现 中国象棋&#xff0c;这款源远流长的棋类游戏&#xff0c;承载着深厚的文化底蕴与策略智慧。如今&#xff0c;借助 Python 与 Pygame 库&#xff0c;我们能够在数字世界中复刻其魅力&#xff0c;深入探究代码背后…...

LBS 开发微课堂|通过openGL ES轻松实现建筑物渲染及动画

为了让广大开发者 更深入地了解 百度地图开放平台的 技术能力 轻松掌握满满的 技术干货 更加简单地接入 位置服务 我们特别推出了 “位置服务&#xff08;LBS&#xff09;开发微课堂” 系列技术案例 第五期的主题是 通过openGL ES轻松实现 建筑物渲染及动画 对于…...

map1[item.id]和map1.get(item.id)的区别为何前者取出的是空,后者取出的是正确的值

在 JavaScript 中&#xff0c;map1[item.id] 和 map1.get(item.id) 用于从 Map 对象中获取值&#xff0c;但它们的工作方式有所不同&#xff1a; map1[item.id]&#xff1a;这种方式用于普通对象&#xff08;Object&#xff09;&#xff0c;它将 item.id 作为键来获取对应的值…...

window端sqlplus连接linux_oracle11g

1. 环境配置回顾 下载 Oracle Instant Client&#xff1a;根据查询到的版本到链接: oracle官网下载对应版本的三个文件&#xff08;比如我这里查询到的版本是12.2.0.1.0&#xff09;&#xff1a; instantclient-basic-windows.x64-12.2.0.1.0.zip instantclient-sqlplus-win…...

Go支付中台方案:多平台兼容与多项目对接

一、中台的概念 中台是一种企业级的架构模式&#xff0c;它处于前台应用和后台资源之间&#xff0c;将企业核心能力进行整合、封装&#xff0c;形成一系列可复用的业务能力组件。这些组件就像乐高积木一样&#xff0c;可以被不同的前台业务快速调用&#xff0c;从而避免重复开…...

MySQL触发器的使用详解

MySQL触发器的使用详解 MySQL触发器是一种特殊的存储过程&#xff0c;它与表操作紧密相关&#xff0c;并且在特定事件&#xff08;如INSERT、UPDATE或DELETE&#xff09;发生时自动执行。触发器的主要目的是确保数据完整性、实现复杂的业务逻辑以及记录审计信息。它们可以在事…...

关于NLP交互式系统的一些基础入门

【1】What 基于自然语言处理&#xff08;NLP&#xff09;的交互式系统是指能够理解、解析并生成人类自然语言的计算机程序。这些系统旨在通过文本或语音与用户进行交流&#xff0c;以提供信息、解决问题或执行任务。以下是关于这类系统的一些关键点&#xff1a; 核心技术&…...

AI技能学习路径全解析:从数学基础到RAG实战与项目构建

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“HieuNghi-AI-Skills”。光看这个名字&#xff0c;你可能会有点摸不着头脑&#xff0c;这到底是做什么的&#xff1f;是教AI新技能&#xff0c;还是整理AI工具的使用技巧&#xff1f;点进去之后&…...

从零学会基础算法前缀和差分:数组区间求和离散化基础

首先祝大家劳动节快乐&#xff01;开学两个月来学的东西不多&#xff0c;主要掌握了两块内容&#xff1a;前缀和/差分/离散化 和 数学基础。本文是第一篇&#xff0c;重点整理前缀和相关内容。 编程语言&#xff1a;C 排版助手&#xff1a;AI一、数组的三个简化技巧 1. 前缀和 …...

C++ 入门核心语法|从 Hello World 到基础特性一次性吃透

文章目录前言一、C 第一个程序&#xff1a;Hello World二、命名空间 namespace1. 为什么需要命名空间&#xff1f;2. 命名空间定义规则3. 三种使用方式三、C 输入 & 输出1. 核心对象2. 最大优势四、缺省参数&#xff08;默认参数&#xff09;1. 定义2. 使用方式3. 声明与定…...

团队知识管理的失效:人员流动如何不导致知识流失

一、软件测试团队知识管理的特殊价值与脆弱性在软件测试领域&#xff0c;知识是保障产品质量的核心资产。不同于开发环节的代码沉淀&#xff0c;测试知识兼具显性与隐性双重属性&#xff1a;显性知识体现在测试用例、缺陷报告、自动化脚本等文档中&#xff0c;而隐性知识则蕴含…...

PyTorch模型参数管理:从torch.nn.Parameter到高效训练实践

1. 理解torch.nn.Parameter的本质 第一次接触PyTorch的torch.nn.Parameter时&#xff0c;我也曾困惑它和普通Tensor的区别。直到在实际项目中踩了几个坑&#xff0c;才真正明白它的价值。让我们从一个简单的例子开始&#xff1a; import torch import torch.nn as nn# 普通Te…...

AI时代数据中心架构变革:从计算中心到加速基础设施

1. 从“计算中心”到“加速基础设施”&#xff1a;数据中心架构的范式转移最近和几个在头部云厂商做架构设计的老朋友聊天&#xff0c;话题总绕不开一个词&#xff1a;加速基础设施。这词儿听起来挺高大上&#xff0c;但说白了&#xff0c;就是咱们传统数据中心那套“通用计算存…...

为什么92%的AI企业还没部署TEE for AI?,20年系统安全专家亲历的4类认知盲区与2026合规倒计时应对清单

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生可信执行环境&#xff1a;2026奇点智能技术大会TEE for AI 在2026奇点智能技术大会上&#xff0c;TEE for AI&#xff08;AI-Native Trusted Execution Environment&#xff09;正式成为下一代AI…...

坐北朝南教育集团

在教育行业不断发展的当下&#xff0c;家长和学生在选择教育机构时常常面临诸多困扰&#xff0c;寻找一家口碑好、教学质量高的教育集团成为了关键。坐北朝南教育集团作为辽沈地区知名的综合教育航母&#xff0c;在解决教育领域痛点方面表现出色&#xff0c;成为众多家长和学生…...

K8s日志太乱?试试用Docker插件把容器日志直通Grafana Loki(保姆级教程)

K8s日志太乱&#xff1f;试试用Docker插件把容器日志直通Grafana Loki&#xff08;保姆级教程&#xff09; 在容器化应用的日常运维中&#xff0c;日志管理往往是最容易被忽视却又最令人头疼的环节。想象一下这样的场景&#xff1a;你的开发环境运行着十几个Docker容器&#xf…...

别再傻傻分不清!Ansys Workbench三大建模界面(SCDM/DM/Mechanical)保姆级对比与选用指南

Ansys Workbench三大建模界面深度解析&#xff1a;如何根据项目需求选择最佳工具 在工程仿真领域&#xff0c;Ansys Workbench作为行业标杆软件套件&#xff0c;其内置的三大建模界面——SpaceClaim&#xff08;SCDM&#xff09;、DesignModeler&#xff08;DM&#xff09;和Me…...