C#编程模式之组合模式(Composite)

devtools/2024/9/23 5:17:11/

        创作背景:各位朋友,我们继续C#编程模式的探讨,这次探讨的模式是组合模式。它和桥接模式一样,是一种结构型设计模式,允许使用者将对象组合成树形结构来展示其“部分和整体”的层次结构。要求同样比较严格,用户对单个对象和组合对象的使用需具有一致性。

        组合模式我的理解就像是俄罗斯套娃,大圈套小圈😃😃。上代码!!!

        1、Component管理类,也可以当作节点使用。

    /// <summary>/// 抽象一个类,管理Component的子部件/// </summary>public abstract class Component{protected string name;public Component(string name) { this.name = name; }/// <summary>/// 增加节点/// </summary>/// <param name="component"></param>public abstract void Add(Component component);/// <summary>/// 移除节点/// </summary>/// <param name="component"></param>public abstract void Remove(Component component);/// <summary>/// 显示结构/// </summary>public abstract string Display(int level);}

        2、Leaf末端节点类。

    /// <summary>/// 叶子节点(无增加节点和删除节点功能)/// </summary>public class Leaf : Component{/// <summary>/// 构造函数/// </summary>/// <param name="name"></param>public Leaf(string name) : base(name) { }public override void Add(Component component) { }public override void Remove(Component component) { }/// <summary>/// 显示层级/// </summary>/// <param name="level"></param>public override string Display(int level){string strResult = string.Empty;strResult = (new string('-', level) + name);return strResult;}}

        3、Composite组合类。

    /// <summary>/// 定义有枝节点的行为,用来存储部件,实现在Component接口中对子部件有关的操作/// </summary>public class Composite : Component{/// <summary>/// 构造函数/// </summary>/// <param name="name"></param>public Composite(string name) : base(name) { }/// <summary>/// 一个子对象集合,用来存储其下属的枝节点和叶节点/// </summary>private List<Component> children = new List<Component>();/// <summary>/// 增加子节点/// </summary>/// <param name="component"></param>public override void Add(Component component){children.Add(component);}/// <summary>/// 移除子节点/// </summary>/// <param name="component"></param>public override void Remove(Component component){children.Remove(component);}/// <summary>/// 遍历所有节点,显示层级结构/// </summary>/// <param name="level"></param>/// <returns></returns>public override string Display(int level){string strResult = string.Empty;strResult = (new string('-', level) + name);// 遍历其子节点并显示foreach (Component component in children){strResult += "\r\n" + component.Display(level + 2);}return strResult;}}

        4、客户端调用。

        /// <summary>/// 组合模式测试/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btn_comb_Click(object sender, EventArgs e){// 生成树根,并为其增加两个叶子节点Combination.Component root = new Composite("Root");root.Add(new Leaf("Leaf A in Root"));root.Add(new Leaf("Leaf B in Root"));// 为根增加两个枝节点Combination.Component branchX = new Composite("Branch X in Root");Combination.Component branchY = new Composite("Branch Y in Root");root.Add(branchX);root.Add(branchY);// 为BranchX增加页节点branchX.Add(new Leaf("Leaf A in Branch X"));// 为BranchX增加枝节点Combination.Component branchZ = new Composite("Branch Z in Branch X");branchX.Add(branchZ);// 为BranchY增加叶节点branchY.Add(new Leaf("Leaf in Branch Y"));// 为BranchZ增加叶节点branchZ.Add(new Leaf("Leaf in Branch Z"));// 显示树tbox_Comb.Text = root.Display(1);}

        5、程序运行截图。

        以上就是小编对组合模式的浅浅的理解,希望对各位有所帮助。 


http://www.ppmy.cn/devtools/25344.html

相关文章

指纹浏览器:网络安全与隐私的新工具

在互联网时代&#xff0c;隐私和网络安全成为人们越来越关注的话题。随着数字化的发展&#xff0c;个人信息的泄露和在线追踪的问题愈发严峻。在这个背景下&#xff0c;"指纹浏览器"作为一种新型工具&#xff0c;开始受到关注。撸空投需要了解指纹浏览器。本文将深入…

Ubuntu搭建RP2040开发环境-1

Ubuntu搭建RP2040开发环境-1 2024-4-23 hongxi.zhu 前置依赖&#xff08;可选&#xff09; sudo apt-get install vim sudo apt-get install cmake sudo apt-get install libncurses-dev sudo apt-get install libssl-dev sudo apt-get install git一、下载SDK和编译链 下载SD…

c++多文件,cmakelist编写简单示例

记录下c多文件cmakelist编写流程&#xff1a; 目录结构大致如下&#xff1a; 1、swap.h #include <iostream> #include <vector> #include <string> using namespace std;void swap(int *a,int *b); 2、swap.cpp #include "swap.h"void swap(…

【MRI重建】Cartesian采样中data consistency 常规数据一致性实现(pytorch)

关于 在MRI重建中,data consistency 可以帮助加快MRI图像重建和减少模型重建带来的重建误差。 工具 方法实现 x_rec: 重建图像, (batch_size,2,H,W) mask: 欠采样模版,(batch_size,2,H,W) k_un: 真实欠采样采集数据, (batch_size,2,H,W) torch.view_as_complex: 将实数数据…

富格林:落实安全出金可信操作

富格林指出&#xff0c;在现货黄金交易理财中&#xff0c;投资者的唯一目标就是降低亏损风险&#xff0c;同时增加安全出金的几率。然而&#xff0c;由于现货黄金行情的多样变化给投资者增加了控制的难度。那么&#xff0c;我们要如何实现安全出金呢&#xff1f;其实有一些可信…

PM2管理器无法使用解决方法

之前的项目全是依靠PM2管理器部署的&#xff0c;部署快速&#xff0c;也便于管理 但是宝塔实在是bug毛病太多&#xff0c;最近这两天又出毛病了 这次的问题是在PM2管理器的node版本中无法进行版本切换&#xff0c;如果是第一次使用PM2的话甚至无法设置node版本&#xff0c;之前…

Qt/C++ 波形绘制双缓冲下改善PaintEvent连续绘制卡顿问题(完整代码解析)

音频波形可视化&#xff1a;该控件用于将音频样本数据可视化为波形&#xff0c;常用于音频处理软件中以展示音频信号的时间域特性。 动态数据绘制&#xff1a;控件能够响应外部数据的变化并重新绘制波形&#xff0c;适用于实时或动态的音频数据流。 自定义绘制逻辑&#xff1…

大数据时代的引擎:大数据架构随记

大数据架构通常可以分为以下几层&#xff1a; 一、数据采集层 负责从各种数据源采集、清洗、转换、丰富以及格式化数据&#xff0c;可能包括结构化、半结构化和非结构化的数据。 1.1、常用的技术 在大数据领域&#xff0c;数据采集是一个关键的环节&#xff0c;常用的数据采集…