c# 组合模式

 更新时间:2012年10月29日 14:02:53   作者:  
组合模式:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。需求中式体现部分与整体层次的结构时,统一地使用组合对象中的所有对象时,应该考虑使用组合模式
结构图:

抽象对象:
复制代码 代码如下:

    abstract class Component
    {
        protected string name;
        public Component(string name)
        {
            this.name = name;
        }
        public abstract void Add(Component c);
        public abstract void Remove(Component c);
        public abstract void Display(int depth);
    }

无子节点的:
复制代码 代码如下:

    class Leaf : Component
    {
        public Leaf(string name)
            : base(name)
        { }
        public override void Add(Component c)
        {
            //throw new NotImplementedException();
            Console.WriteLine("Cannot add to a Leaf");
        }
        public override void Remove(Component c)
        {
            //throw new NotImplementedException();
            Console.WriteLine("Cannot remove to a Leaf");
        }
        public override void Display(int depth)
        {
            //throw new NotImplementedException();
            Console.WriteLine(new string('-', depth) + name);
        }
    }

可以有子结点:
复制代码 代码如下:

    class Composite : Component
    {
        private List<Component> children = new List<Component>();
        public Composite(string name)
            : base(name)
        { }
        public override void Add(Component c)
        {
            //throw new NotImplementedException();
            children.Add(c);
        }
        public override void Remove(Component c)
        {
            //throw new NotImplementedException();
            children.Remove(c);
        }
        public override void Display(int depth)
        {
            //throw new NotImplementedException();
            Console.WriteLine(new string('-', depth) + name);
            foreach (Component component in children)
            {
                component.Display(depth + 2);
            }
        }
    }

 主函数调用:
复制代码 代码如下:

    class Program
    {
        static void Main(string[] args)
        {
            Composite root = new Composite("root");
            root.Add(new Leaf("Leaf A"));
            root.Add(new Leaf("Leaf B"));
            Composite comp = new Composite("Composite X");
            comp.Add(new Leaf("Leaf XA"));
            comp.Add(new Leaf("Leaf XB"));
            root.Add(comp);
            Composite comp2 = new Composite("Composite X");
            comp2.Add(new Leaf("Leaf XYA"));
            comp2.Add(new Leaf("Leaf XYB"));
            comp.Add(comp2);
            root.Display(1);
            Console.ReadKey();
        }
    }
 

相关文章

  • C# 实现视频监控系统(附源码)

    C# 实现视频监控系统(附源码)

    这篇文章主要介绍了C# 如何实现视频监控系统,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2021-02-02
  • C#开发微信门户及应用(3) 文本消息和图文消息应答

    C#开发微信门户及应用(3) 文本消息和图文消息应答

    这篇文章主要为大家详细介绍了C#开发微信门户及应用第二篇,微信文本消息和图文消息的应答,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • c#数据类型基础

    c#数据类型基础

    C#里面的数据类型分为两种:值类型和引用类型。
    2008-08-08
  • C#读取csv格式文件的方法

    C#读取csv格式文件的方法

    这篇文章主要介绍了C#读取csv格式文件的方法,包括针对csv文件操作的规则,实例代码部分包含了数据有效性验证及行列验证等内容,逻辑严谨,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • 使用C#实现一个简单的绘图工具

    使用C#实现一个简单的绘图工具

    这篇文章主要为大家详细介绍了如何使用C#开发的简单绘图工具,可以将签名简单绘图后的效果以图片的形式导出,有需要的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • unity实现鼠标拖住3D物体

    unity实现鼠标拖住3D物体

    这篇文章主要为大家详细介绍了unity实现鼠标拖住3D物体,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • 在Framework 4.0中:找出新增的方法与新增的类(二)

    在Framework 4.0中:找出新增的方法与新增的类(二)

    为什么动态加载程序集无法找出Framework 4.0 和Framwork2.0 新增的方法和类
    2013-05-05
  • 基于Unity实现2D边缘检测

    基于Unity实现2D边缘检测

    这篇文章主要介绍了如何利用Unity实现2D边缘检测,从而达到人物描边效果。文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-04-04
  • C# Winform 让整个窗口都可以拖动

    C# Winform 让整个窗口都可以拖动

    Windows 的 API 果然强大啊.以前要实现全窗口拖动, 要写鼠标按下和抬起事件, 很是麻烦, 偶尔还会出现 BUG
    2011-05-05
  • DataTables List互相转换的实现类示例

    DataTables List互相转换的实现类示例

    这篇文章主要介绍了将DataTable转换为List,将List转换为DataTable的实现类实例方法,大家参考使用吧
    2013-11-11

最新评论