您的位置:首页 > 编程语言 > C#

C#实现的组合模式

2014-06-11 19:31 309 查看
组合模式

(1)UML设计图

 


(2)核心实现代码

 public abstract class Component //Component类:组合中的对象声明接口,在适当情况下,实现所有类共有接口的行为。声明一个接口用于访问和管理Component的子部件
{
protected string name; //名称

public abstract void Add(Component c); //抽象方法Add,用于添加叶子
public abstract void Remove(Component c);//抽象方法remove,用于移除叶子
public abstract void Diaplay(int depth);//输出“-”

public Component(string name) //构造方法
{
this.name = name;
}

}

public class Composite : Component//组合类Composite继承于Component,拥有枝节点行为,允许add叶子或节点,允许remove相应节点
{
List<Component> children;

public Composite(string name): base(name)//构造函数,调用父类也就是componet的构造方法
{
if (children == null) //若孩子节点已经存在,则不再创建
{
children = new List<Component>();
}
}

public override void Add(Component c) //覆盖add方法
{
this.children.Add(c);
}

public override void Remove(Component c)//覆盖remove方法
{
this.children.Remove(c);
}
public override void Diaplay(int depth) //输出“-”
{
Console.WriteLine(new String('-',depth)+name);
foreach (Component component in children)
{
component.Diaplay(depth + 2);
}
}
}

public class Leaf : Component
{

public Leaf(string name): base(name){}

public override void Add(Component c) //覆盖add方法
{
Console.WriteLine("该节点是叶子节点,不能再有节点了");
}

public override void Remove(Component c)//覆盖remove方法
{
Console.WriteLine("没有叶子节点,你叫我怎么删");
}

public override void Diaplay(int depth)//输出“-”
{
Console.WriteLine(new string('-', depth) + name);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# 组合模式