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);
}
}
}
(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#实现)-组合模式
- 设计模式C#实现(十一)——组合模式
- 设计模式之C#实现(二)---Builder
- Singleton设计模式的C#实现(下)
- 设计模式-工厂模式(手工作坊到工业化的转变 c#实现)
- 用C#实现Visitor模式
- 用C#实现的Observer模式
- 设计模式之C#实现(一)--AbstractFactory(补)
- Observer Pattern(观察者模式)及其在C#中的实现
- 设计模式-工厂模式(手工作坊到工业化的转变 c#实现)
- 设计模式之C#实现---- ProtoType
- 设计模式的C#实现
- 设计模式之C#实现(三)FactoryMethod
- 设计模式之C#实现(三)FactoryMethod
- 设计模式之C#实现(一)--AbstractFactory
- 设计模式-工厂模式(手工作坊到工业化的转变 c#实现)
- C#设计模式之组合(Composite)
- C#设计模式之组合(Composite)
- 设计模式之C#实现(四)---- ProtoType
- C#2.0中用范型实现单例模式