当前位置:  编程技术>.net/c#/asp.net

c# 组合模式

    来源: 互联网  发布时间:2014-10-15

    本文导语:  结构图: 抽象对象: 代码如下:    abstract class Component    {        protected string name;        public Component(string name)        {            this.name = name;        }        public abstract void Add(Component c);     ...

结构图:

抽象对象:
代码如下:

    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 children = new List();
        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();
        }
    }
 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 有关组合框显示的问题.
  • 一个关于组合查询的问题
  • 面向组合编程框架 Qi4j
  • 纯C语言:递归组合数源码分享
  • 急!!! Java面试时的一个排列组合问题
  • PHP随机生成随机个数的字母组合示例
  • jQuery组合框插件 Sexy Combo
  • 怎样捕获组合框中文本发生变化的事件?
  • 请问:什么是组合?看了THINGKING IN JAVA后,还是不是很明白
  • Android源码学习之组合模式定义及应用 iis7站长之家
  • python 排列组合之itertools
  • PHP 网页架站工具组合包 AppServ
  • jQuery 的 Combo 组合框插件 jcombo
  • 组合框的问题,在线等候
  • 高分求教!!!!如何将数据库的查询结果组合起来?
  • 关于组合框的一个问题?
  • 在linux下如何编程识别shift+tab的组合键?
  • 请问如何编程临时禁用Alt+tab组合键?
  • 虚拟机和主机直接切换,不用ctrl,alt组合键怎样设置
  • super ssh awk三个命令组合的奇怪问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3