设计模式学习笔记--组合模式

RH850_U2A系列HSM安全核开启但是固件未烧录导致无法启动也无法再烧入固件废板问题分析解决 hsm核导致的安全锁死补救方案 阅读详情

一.简介


今天来学习一下组合模式。说到组合模式,可能比较陌生,但是有很多地方是非常适合使用组合模式的。比如我们电脑系统内的文件系统。文件包含在文件夹内,而文件夹有可能还被其他文件夹包含,整个文件系统呈一个树形结构。对于文件的操作,我们可以操作整个文件夹,相应的文件夹下所有的子文件,子文件夹都会被递归的操作。而我们并不需要知道文件夹下面是什么东东,只需要对根文件夹操作即可。
下面看一下组合模式的定义以及UML类图:
组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。

二.组合模式的例子



好了,要想更加深刻地理解设计模式,还是要通过实际的例子才能获得更深刻的印象。就拿我们最常用的文件系统来说,如果这个文件系统需要我们来实现,那我们需要怎么实现文件系统的结构呢?给文件实现一个最简单的功能。我们知道,文件系统中分为文件夹和具体的文件,而文件夹内可能包含文件,也可能包含文件夹,整体呈现树形结构,下面我们使用代码来实现以下文件系统。

1.没有使用组合模式的情况

// Design Pattern.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;

//文件类
class TextFile
{
private:
	string name;
public:
	TextFile(string n)
		: name(n)
	{
	
	}

	//文件操作功能
	void Option()
	{
		cout << name <<" 文件操作" << endl;
	}
};

class FileFolder
{
private:
	string name;
	vector<FileFolder*> fileFolderVec;
	vector<TextFile*> textFileVec;
public:
	FileFolder(string n)
		: name(n)
	{

	}

	void AddFile(TextFile* file)
	{
		textFileVec.push_back(file);
	}

	void AddFileFolder(FileFolder* folder)
	{
		fileFolderVec.push_back(folder);
	}

	void Option()
	{
		cout<< name << " 文件夹被操作" << endl;
		//先遍历文件容器,将文件夹本身包含的文件进行操作
		for (vector<TextFile*>::iterator it = textFileVec.begin(); it != textFileVec.end(); ++it)
		{
			(*it)->Option();
		}
		//再遍历文件夹容器,递归调用文件夹下文件夹的操作
		for (vector<FileFolder*>::itera
YOLOv8【第十章:多任务扩展深度篇·第1节】YOLOv8-Seg 实例分割:Mask原型生成与系数预测原理解析! 🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。 阅读详情

相关推荐

保姆级教程:用YOLOv5s搞定钢材表面缺陷检测,从数据集NEU-DET到模型部署全流程

本文提供了一份详细的YOLOv5s钢材表面缺陷检测教程,涵盖从NEU-DET数据集处理到模型部署的全流程。针对工业环境中的实际限制,如计算资源有限和标注样本少等问题,提供了优化方案和实用技巧,帮助开发者快速实现高效的钢材缺陷检测系统。

weixin_30568591的博客 464

wsl2 配置ubuntu 固定ip

wsls ubuntu 设置固定ip

musk1212的博客 2616

STM32CubeMX——循迹传感器TCRT5000的使用

前言 人生如逆旅,我亦是行人。 ————苏轼《临江仙·送钱穆父》 一、介绍 TCRT5000描述:(带有晶体管输出的反射光学传感器) TCRT5000是一种反射式光学传感器,它包括一个红外发射器和一个3.5mm引线封装的光电晶体管,可阻挡可见光。还具有1mA 典型被测输出电流,2.5mm峰值工作距离,可应用传感与仪表,工业等行业。 TCRT5000具有紧凑的结构,其中发射光源和探测器布置在同一方向,通过使用来自物体的反射红外光束来感知物体的存在。工作波长为950毫米,探测器由光电晶体管组成

W_Oilpicture的博客 1万+

基于级联H桥的储能变流器仿真与性能优化

本文深入探讨了基于级联H桥的储能变流器,通过仿真建模与性能优化,详细解析了其模块化结构、载波移相SPWM控制策略及核心性能指标。重点攻克了电池SOC均衡难题,介绍了利用零序电压注入实现相内均衡及功率调节实现相间均衡的实战策略,为提升储能系统效率与电池寿命提供了关键技术路径。

gpu4optimizer的博客 370

Qwen2.5-VL多模态微调超参数深度解析(上):训练流程与优化策略的量化机制分析

上篇文章通过系统化的对比实验,回答了多模态微调中的三个基础问题:“选什么方法”(LoRA/Full/Freeze/OFT对比)、“用什么配置”(60+组超参数组合)、“达到什么效果”(ROUGE-L/BLEU-4指标)。这些结果为后续工作奠定了实验基线,但也留下了更深层的疑问:为何相同方法在不同数据集上表现迥异?为何某些超参数的微小调整会引发性能剧变?如何在未见过的任务上快速找到最优配置?本文是对前文实验数据的二次挖掘与机理解析。我们将关注点从"做了什么实验"转移到"实验揭示了什么规律",实验视角从"结果对

羊城迷鹿的博客 1005

GTSAM | gtsam::ISAM2

本节简单介绍`gtsam::ISAM2`类。

九七的博客 734

Qt Quick (QML) 老年人健康管理

通过 **Qt SQL** 模块将所有健康数据(用药记录、体检数据等)安全地存储在本地 **SQLite** 数据库中。你想用 **Qt C++** 结合 **Qt Quick** (QML) 来开发一个老年人健康管理软件,主要功能包含 **用药提醒** 和 **健康记录** (使用 `Qt SQL` 存储数据)。* **UI 框架**: Qt Quick (QML) - 用于构建流畅、动态的用户界面。**数据模型类 (models/MedicationReminder.h / .cpp)**

寒寒豆豆软件公司的博客 192

配置 SAP Fiori 服务的 ICF 节点:从 SICF 激活到访问链路打通的完整实践

在SAP Fiori项目实施中,ICF节点配置是关键前置条件却常被忽视。ICF(Internet Communication Framework)作为HTTP请求入口,需要通过SICF事务码激活相关服务节点,否则即使应用开发完善,用户仍可能遇到页面无法访问等问题。典型问题表现为:磁贴可点击但页面空白、资源加载失败等。激活路径主要涉及三组节点:bsp分支下的管理入口、ui5_ui5分支下的应用资源,以及public/bc下的公共资源。项目实施中需特别注意同名服务在不同分支下的差异化作用,确保完整链路通畅。IC

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 264

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: AR技术资料汇总
下一篇: 设计模式学习笔记--桥接模式
puppet_master
puppet_master 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄12年 2695粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值