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

【C#设计模式(9)——组合模式(Component Pattern)】

前言

组合模型是将对象组合成树形结构以表示“整体-部分”的层次结构,使客户终端代码更加简洁和灵活。

代码

//目录抽象类
public abstract class Directory
{
    protected string _name;
    public Directory(string name)
    {
        _name = name;
    }
    public abstract void Show();
}
//子目录
public class SubDirectory : Directory
{
    public SubDirectory(string name) : base(name)
    {
    }

    public override void Show()
    {
        Console.WriteLine($"sub directory show : {_name}");
    }
}
//父目录
public class ParentDirectory : Directory
{
    private List<Directory> children;

    public ParentDirectory(string name) : base(name)
    {
        children = new List<Directory>();
    }

    public void Add(Directory catalogue)
    {
        children.Add(catalogue);
    }
    public void Remove(Directory catalogue)
    {
        children.Remove(catalogue);
    }
    public override void Show()
    {
        Console.WriteLine($"Parent directory show : {_name}");
        foreach (var item in children)
        {
            item.Show();
        }
    }
}


 /*
  * 结构型模式:Structural Pattern
  * 组合模式: Component Pattern
  * 组合模式是将对象组合成树形结构以表示“整体-部分”的层次结构使客户终端代码更加简洁和灵活。
  */
 internal class Program
 {
     static void Main(string[] args)
     {
         //创建父目录
         ParentDirectory rootDirectory =new ParentDirectory("root");
         ParentDirectory parentDirectory1 = new ParentDirectory("parent1");
         ParentDirectory parentDirectory2 = new ParentDirectory("parent2");

         //创建子目录
         SubDirectory subDirectory1 = new SubDirectory("sub1");
         SubDirectory subDirectory2 = new SubDirectory("sub2");
         SubDirectory subDirectory3 = new SubDirectory("sub3");

         //添加目录到...
         rootDirectory.Add(parentDirectory1);
         rootDirectory.Add(parentDirectory2);
         parentDirectory1.Add(subDirectory1);
         parentDirectory2.Add(subDirectory2);
         parentDirectory2.Add(subDirectory3);

         //查看目录
         rootDirectory.Show();

         Console.ReadLine();
     }
 }

运行结果

在这里插入图片描述


http://www.kler.cn/a/394130.html

相关文章:

  • ubuntu20.04 解决Pytorch默认安装CPU版本的问题
  • 【go从零单排】JSON序列化和反序列化
  • 结构体(c语言)
  • Flutter Getx状态管理
  • HarmonyOS Next星河版笔记--界面开发(4)
  • Springboot集成syslog+logstash收集日志到ES
  • STM32设计学生宿舍监测控制系统
  • 基于Affine-Sift算法的图像配准matlab仿真
  • 【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现(Kalman Filter)
  • Scala 的Set集合
  • 《青牛科技 GC6125:驱动芯片中的璀璨之星,点亮 IPcamera 和云台控制(替代 BU24025/ROHM)》
  • GPT o1 模型使用及API调用
  • 如何绑定洛谷账号
  • 计算机视觉 ---常见图像文件格式及其特点
  • 均值方差增量计算
  • Java EE 技术基础知识体系梳理
  • 数据分析丨世界杯冠军猜想:EA 体育游戏模拟能成功预测吗?
  • i春秋-EXEC(命令执行、nc传输文件、带外通道传输数据)
  • JavaScript中统计每个字符出现的个数(使用reduce方法)
  • unity单例模式的不同声明(待完善
  • 【C语言】从3x5矩阵计算前三行平均值并扩展到4x5矩阵
  • 为什么hbase在大数据领域渐渐消失
  • 速盾:cdn 支持 php 吗?
  • 如何保障医院内部的隔离网安全跨网文件交换?
  • PyTorch深度学习与企业级项目实战-预训练语言模型GPT
  • 探索AutoDL与CodeWithGPU:深度学习之旅的新起点