组合模式

原创 2016年08月30日 15:52:51

Component.cs

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);
}

Composite.cs

class Composite:Component
{
    private List<Component> children = new List<Component>();

    public Composite(String name) : base(name)
    {

    }

    public override void Add(Component c)
    {
        children.Add(c);
    }

    public override void Remove(Component c)
    {
        children.Remove(c);
    }

    public override void Display(int depth)
    {
        Console.WriteLine(new String('-', depth) + name);

        foreach(Component component in children)
        {
            component.Display(depth + 2);
        }
    }
}

Leaf.cs

class Leaf:Component
{
    public Leaf(String name) : base(name)
    {

    }

    public override void Add(Component c)
    {
        Console.WriteLine("Cannot add to a leaf");
    }

    public override void Remove(Component c)
    {
        Console.WriteLine("Cannot remove on a leaf");
    }

    public override void Display(int depth)
    {
        Console.WriteLine(new string('-', depth) + name);
    }
}

Program.cs

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 XY");
        comp2.Add(new Leaf("Leaf XYA"));
        comp2.Add(new Leaf("Leaf XYB"));

        root.Add(comp2);

        root.Add(new Leaf("Leaf C"));

        Leaf leaf = new Leaf("Leaf D");
        root.Add(leaf);
        root.Remove(leaf);

        root.Display(1);

        Console.Read();
    }
}

运行结果:
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Headfirst(九)组合模式C++实现代码

  • 2015年10月21日 15:34
  • 1.58MB
  • 下载

java组合模式例子

  • 2015年01月07日 13:49
  • 2KB
  • 下载

HTML5 Canvas进阶(二):模式,组合,阴影,状态,变形

模式 前面在介绍strokeStyle和fillStyle属性的时候曾说过它们的取值可以是CSS颜色值、渐变对象或者模式对象。在上一篇中已经介绍过渐变对象了,那么这篇的开始就介绍模式对象。 模式对...

组合模式源码

  • 2015年03月20日 15:21
  • 45KB
  • 下载

树形结构的处理——组合模式

本文转载自 :http://blog.csdn.net/lovelion/article/details/7956898 树形结构在软件中随处可见,例如操作系统中的目录结构、应用软件...

组合模式Demo

  • 2017年05月31日 17:55
  • 22.38MB
  • 下载

组合模式(python)

组合模式:针对“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 #encoding=utf-8 # #by panda #组合模式 def printInfo(info)...

Qt 组合模式画图

  • 2013年12月30日 19:45
  • 4.6MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:组合模式
举报原因:
原因补充:

(最多只允许输入30个字)