设计模式学习之组合模式(Composite)
作用:使组件既可以是单个对象,也可以是对象的组合。比如:算术表达式包括操作数、操作符和另一个操作数。操作数可以是数字,也可以是另一个表达式。这样,2+3和(2+3)+(4*6)都是合法的表达式;再比如:常用的树控件,其对象可以是一个节点,也可以是一个叶子。对一棵树来说,对其添加节点还是添加叶子是一样的。
实现要点:ArrayList , 众所周知.net提供的ArrayList极大地方便了你组合对象或者移除对象。
代码:这里只给出类结构,至于怎么用?想象一下你平时是怎么生成树的吧,对每一个节点,你都可以任意增加叶子或者节点,因为我给你
提供的接口是一样的。(唯一注意的是你不能在叶子下再加节点或者叶子了,我也给你提供了异常处理)
abstract class Tree
{
public abstract void Add(Tree newObj);
public abstract void Remove(Tree newObj);
}
class Node : Tree
{
ArrayList arr = new ArrayList();
public override void Add(Tree newObj)
{
arr.Add(newObj);
}
public override void Remove(Tree newObj)
{
arr.Remove(newObj);
}
}
class LEAF : Tree
{
public override void Add(Tree newObj)
{
throw new NotImplementedException();
}
public override void Remove(Tree newObj)
{
throw new NotImplementedException();
}
}
{
public abstract void Add(Tree newObj);
public abstract void Remove(Tree newObj);
}
class Node : Tree
{
ArrayList arr = new ArrayList();
public override void Add(Tree newObj)
{
arr.Add(newObj);
}
public override void Remove(Tree newObj)
{
arr.Remove(newObj);
}
}
class LEAF : Tree
{
public override void Add(Tree newObj)
{
throw new NotImplementedException();
}
public override void Remove(Tree newObj)
{
throw new NotImplementedException();
}
}