首页 > 编程语言 >C# 组合模式构建树形结构,实现多级指令菜单模式

C# 组合模式构建树形结构,实现多级指令菜单模式

时间:2024-03-24 16:46:23浏览次数:18  
标签:guid name C# System 模式 树形 new using Guid

使用场景

图形界面库在图形界面开发中,UI 元素(按钮、文本框等)和容器元素(面板、窗口等)可以使用组合模式来构建复杂的用户界面。这样,可以统一处理单个元素和组合元素,使得客户端代码更简洁

文件系统和目录结构文件系统是一个经典的组合模式应用场景。文件夹可以包含文件和其他文件夹,形成一个树形结构。通过组合模式,可以一致地处理文件和文件夹,而不必在客户端代码中区分它们

组织架构和人员管理:在组织架构中,部门可以包含员工和其他部门,形成一个层次结构。通过组合模式,可以一致地管理单个员工和组合部门,简化组织管理的代码。

菜单和菜单项:菜单系统通常包含菜单项和子菜单,可以使用组合模式来构建菜单层次结构。这样,可以一致地处理单个菜单项和包含子菜单的菜单

----实现指令菜单模式,新建ICommand.cs(接口),Command.cs(子叶),CommandManage.cs(复合叶),main窗体

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WinFormsApp8
{
    internal interface ICommand
    {
        Guid Guid { get; set; }  
        String Name { get; set; }
        void Execute();
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WinFormsApp8
{
    internal class Command : ICommand
    {
        private Guid _guid;

        private string _name;

        Guid ICommand.Guid { get => _guid; set => _guid = value; }
        string ICommand.Name { get => _name; set => _name = value; }

        public void Execute()
        {
            _action();
        }

        private Action _action;

        public Command(string guid,string name, Action action)
        {
            _guid = new Guid(guid);
            _name= name;
            _action = action;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WinFormsApp8
{
    internal class CommandManage : ICommand
    {
        public Dictionary<string, ICommand> Commands = new Dictionary<string, ICommand>();
        private Action _action;
        private Guid _guid;
        private string _name;
        Guid ICommand.Guid { get => new Guid(); set => _guid = value; }
        string ICommand.Name { get => _name; set => _name = value; }
        public CommandManage(string guid, string name, Action action)
        {
            _guid = new Guid(guid);
            _name = name;
            _action = action;
        }
        public void Execute()
        {
           _action();   
        }

        public void Add(ICommand imd)
        {
            Commands[imd.Guid.ToString()] = imd;
        }

        public void Del(ICommand imd)
        {
            if (Commands.ContainsKey(imd.Guid.ToString())) Commands.Remove(imd.Guid.ToString());
        }
    }
}
        private void Form1_Load(object sender, EventArgs e)
        {
            CommandManage cmds = new CommandManage("96498A68-F01D-4DCC-B786-BFCB6C250A6A", "root", null);
            cmds.Add(new Command("96498A68-F01D-4DCC-B786-BFCB6C250A63", "leaf",null));
            cmds.Add(new Command("96498A68-F01D-4DCC-B786-BFCB6C250A61", "leaf", null));
            var leafq = new CommandManage("96498A68-F01D-4DCC-B786-BFCB6C250A93", "leaf", null);
            cmds.Add(leafq);
            leafq.Add(new Command("96498A68-F01D-4DCC-B786-BFCB6C250A65", "leaf", null));
            leafq.Add(new Command("96498A68-F01D-4DCC-B786-BFCB6C250A67", "leaf", null));
            var mm = cmds;
        }

 

标签:guid,name,C#,System,模式,树形,new,using,Guid
From: https://www.cnblogs.com/itsone/p/18092610

相关文章

  • macbook使用php的fastadmin框架验证码不显示解决办法
    macbook使用php的fastadmin框架验证码不显示解决办法给php安装freetype插件freetype下载链接解压插件进入命令行工具,然后进到刚才解压的文件目录中然后执行该命令./configure--enable-static--enable-shared(没有指定prefix,.h文件默认安装到/usr/local/includ......
  • Pedagogic metalanguage
    TheEnglishvideoI’dliketochooseisaclipfromthemoviePrideandPrejudice.Thesceneissetinavastfield.Theskyhadjustdawned,creatinganimageofserenity.Darcywalkedoutofthemorningmist,stepbystep.Behindhimwasthelightofth......
  • 安装Visual Studio2015后找不到C++项目模板解决办法
    安装VisualStudio2015后找不到C++项目模板解决办法:方法1:您可以通过修改VisualStudio来完成此操作,并且可以使用以下步骤完成此操作:1、转到“添加或删除程序”对话框中的“控制面板”;2、选择要修复的产品,然后单击“安装向导”,单击“Next;3、单击“repair。方法2:您可以通过以下......
  • DMA cache一致性
    本节内容参考《宋宝华:Linux设备驱动开发详解》 cache和DMA本身似乎是两个毫无关联的事物。cache被用作CPU针对内存的缓存,利用程序的空间局部性和时间局部性原理,达到较高的命中率,从而避免CPU每次都必须要与相对慢速的内存交互数据来提高数据的访问速率。DMA可以作为内存与外设之......
  • 编写简单的nginx Dockerfile文件
    .1.创建Dockerfile文件touchDockerfile添加如下相关的配置信息 #设置维护者信息LABELmaintainer="[email protected]" #使用官方Nginx基础镜像FROMnginx:1.24.0 #安装构建Nginx模块所需的工具和依赖RUNapkadd--no-cache--virtual.build-deps\   ......
  • macbook(M1芯片)搭建php+nginx运行环境
    macbook(M1芯片)搭建php+nginx运行环境php安装phpbrewinstallphp//低版本php需要这样安装brewinstallshivammathur/php/[email protected]配置环境变量(低版本的php才需要)echo'exportPATH="/usr/local/opt/[email protected]/bin:$PATH"'>>~/.zshrcecho'exportPATH=&quo......
  • c语言程序设计--实验报告二
    实验项目名称:实验报告2数据描述实验项目类型:验证性实验日期:2024年3月21日一、实验目的1、掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。2、掌握不同数据类型之间赋值的规律。3、学会使用C的有关算术运算符,以及包含这些运算符的表达式。......
  • Open CASCADE学习|显示文本
    目录1、修改代码Viewer.h:Viewer.cpp:2、显示文本OpenCasCade你好啊霜吹花落1、修改代码在文章《OpenCASCADE学习|显示模型》基础上,增加部分代码,实现对文本显示的支持,具体如下:Viewer.h://-----------------------------------------------------------------------......
  • 「Linux系列」Shell 流程控制if-else/for循环/While循环/until循环/case语句/跳出循环
    文章目录一、Shell流程控制二、If语句三、For循环四、While循环五、Until循环六、Case语句七、跳出循环break/continue八、相关链接一、Shell流程控制Shell脚本中的流程控制结构允许你根据条件执行不同的代码块,或者重复执行某些代码块。这些结构包括if语句......
  • 【C++】Linux多线程开发
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录3.1线程概述3.2创建线程3.3、线程终止3.4连接已经终止线程3.5线程的分离3.6线程取消3.7线程属性3.8线程同步3.9互斥锁3.10死锁3.11读写锁3.12生产者和消费者模型3.13条件......