组合模式

原创 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();
    }
}

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

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

对于组合模式的理解

今天看了组合模式 ,多用于树形结构 定义:  组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象...
  • AlbertFly
  • AlbertFly
  • 2016年06月16日 12:14
  • 3260

结构型模式之——组合模式

结构型模式之 组合模式 前言 模式定义 模式结构 UML类图 适用场景 在以下情况下可以使用组合模式 看看大神怎么用 高清有码 总结 感谢结构型模式之 组合模式前言对于树形结构,在代码中有容器节点和叶...
  • u012984054
  • u012984054
  • 2016年08月18日 01:00
  • 813

树形结构的处理——组合模式(四):透明组合模式与安全组合模式

11.4 透明组合模式与安全组合模式通过引入组合模式,Sunny公司设计的杀毒软件具有良好的可扩展性,在增加新的文件类型时,无须修改现有类库代码,只需增加一个新的文件类作为AbstractFile类的...
  • will130
  • will130
  • 2016年01月19日 11:06
  • 594

JAVA设计模式初探之组合模式

先看看组合模式的定义吧:“将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。”    就拿剪发办卡的事情来分析一下吧。    首先,一张卡可...
  • jason0539
  • jason0539
  • 2014年03月31日 08:40
  • 22686

【js设计模式笔记---组合模式】

组合模式 组合模式是一种专为创建Web上动态用户界面而量身定制的模式。使用这种模式,可以用一条命令在多个对象上激发复杂的或递归的行为。 组合模式为操劳过度的javascript程序员带来了两大的好处 ...
  • pigpigpig4587
  • pigpigpig4587
  • 2014年05月19日 15:42
  • 849

设计模式——组合模式+案例

先给个代码地址吧 https://github.com/yyfyyf1994/knowledge/tree/master/src/yyf/designpatterns/composite ...
  • qq_18860653
  • qq_18860653
  • 2016年11月21日 16:51
  • 699

设计模式--组合模式--商品排序案例

所有的例子均来源与实际开发项目 本节介绍组合模式的使用–商品结果排序评分系统...
  • yangxy81118
  • yangxy81118
  • 2014年08月20日 19:48
  • 2935

深入浅出组合模式

一、引子在大学的数据结构这门课上,树是最重要的章节之一。还记得树是怎么定义的吗?树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:(1)    有且仅有一个特定的...
  • ai92
  • ai92
  • 2005年02月23日 10:33
  • 14463

组合模式(Composite Pattern)(一):组合模式介绍

一、意图 将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。 二、适用性 • 你想表示对象的...
  • jialinqiang
  • jialinqiang
  • 2013年05月20日 22:30
  • 3584

Java 设计模式——组合模式

有时我们可能会被要求处理一个层级结构明显的对象,比如上下级的公司员工、比如层级嵌套的文件夹,还有丰富多彩的美食菜单。可是,我们可能要屡试不爽地编写深度搜索代码、要小心翼翼地编写递归逻辑。现在你可以忘掉...
  • u013761665
  • u013761665
  • 2016年05月17日 17:39
  • 7810
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:组合模式
举报原因:
原因补充:

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