ITPub博客

首页 > Linux操作系统 > Linux操作系统 > c#设计模式_全部部分模式_组合模式

c#设计模式_全部部分模式_组合模式

原创 Linux操作系统 作者:wisdomone1 时间:2012-06-11 16:52:54 0 删除 编辑
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace ConsoleApplication1
{
    //叶子节点与非叶子节点皆须实现的功能
    abstract class component
    {
        protected string name;
        public component(string name)
        {
            this.name = name;
        }

        //这个抽象方法display,在叶子与非叶子中皆要实现它
        public abstract void display(int depth);
    }

    //因为叶了与非叶子节点的特征不同,故display的实现会有不同,这也就是把display单独抽出来放在一个抽象基类的作用吧
    class composite : component
    {
        //节点集合,故用arraylist
        private ArrayList children = new ArrayList();
        public composite(string name)
            : base(name)
        {
        }

        //封装下就可以把指定的参数(对象或值类型)传给arraylist的add方法
        //利用已有的系统方法,加强其功能与作用
        
        //采用了抽象基类component,它是叶子与非叶了节点类皆须实现的功能
        public void add(component component)
        {
            children.Add(component);
        }
        public void remove(component component)
        {
            children.Remove(component);
        }
        public override void display(int depth)
        {
            Console.WriteLine(new string('*',depth)+name);

            foreach (component com in children)
                com.display(depth+2);
        }
    }

    class leaf : component
    {
        public leaf(string name)
            : base(name)
        { }
        public override void display(int depth)
        {
            Console.WriteLine(new string('*',depth)+name);
        }
    }
   
    //客户端
    class Program
    {
       
        static void Main(string[] args)
        {
            //根节点
            composite root = new composite("root");
            root.add(new leaf("叶子1"));
            root.add(new leaf("叶子2"));
            //composite.add(方法参数的类型是component)这就很灵活了,它是抽象基类,而叶子与非叶子皆继承它,所以
            //用add可以插入叶子与非叶子的节点了,如果你换成具体的派生类就不这样灵活了,或者说它的扩展性就不好了
            
            composite comp = new composite("composite x");
            comp.add(new leaf("leaf xa"));
            comp.add(new leaf("leaf xb"));
            root.add(comp);
            root.display(1);
            Console.ReadKey();
        }
        
    }

}


写得乱,现在编码水平很差,暂记于此

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-732476/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb qq: 305076427 微博: wisdomone9

注册时间:2008-04-04

  • 博文量
    2164
  • 访问量
    11711540