欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c# 组合模式

程序员文章站 2023-12-04 22:12:28
结构图: 抽象对象:复制代码 代码如下:    abstract class component    {&nb...
结构图:
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<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();
        }
    }