c# 组合模式
c# 组合模式
发布时间:2016-12-28 来源:查字典编辑
摘要:结构图:抽象对象:复制代码代码如下:abstractclassComponent{protectedstringname;publicCom...

结构图:

c# 组合模式1

抽象对象:

复制代码 代码如下:

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

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类