组合模式的目的是: 用户对单个对象和组合对象的使用具有一致性。
实例代码:
abstract class TreeElement
{
protected string name;
public TreeElement(string name)
{
this.name = name;
}
public abstract void Add(TreeElement t);
public abstract void Remove(TreeElement t);
public virtual void Display(int indent)
{
Console.WriteLine(new String(' ', indent) + name);
}
}
class SimpleElement : TreeElement
{
public SimpleElement(string name)
: base(name)
{
}
public override void Add(TreeElement c)
{
Console.WriteLine("不能添加节点");
}
public override void Remove(TreeElement c)
{
Console.WriteLine("不能删除节点");
}
}
class CompositeElement : TreeElement
{
private ArrayList elements = new ArrayList();
public CompositeElement(string name)
: base(name)
{
}
public override void Add(TreeElement d)
{
elements.Add(d);
}
public override void Remove(TreeElement d)
{
elements.Remove(d);
}
public override void Display(int indent)
{
base.Display(indent);
foreach (TreeElement c in elements)
{
c.Display(indent + 2);
}
}
}
class MainApp
{
static void Main()
{
CompositeElement root = new CompositeElement("树根");
CompositeElement comp1 = new CompositeElement("树枝1");
comp1.Add(new SimpleElement("树叶1"));
comp1.Add(new SimpleElement("树叶2"));
root.Add(comp1);
CompositeElement comp2 = new CompositeElement("树枝2");
comp2.Add(new SimpleElement("树叶3"));
comp2.Add(new SimpleElement("树叶4"));
root.Add(comp2);
root.Add(new SimpleElement("树叶5"));
root.Add(new SimpleElement("树叶6"));
SimpleElement pe = new SimpleElement("树叶7");
root.Add(pe);
root.Add(new SimpleElement("树叶8"));
root.Display(1);
Console.WriteLine();
root.Remove(comp2);
root.Remove(pe);
root.Display(1);
Console.Read();
}
}
实例代码:
abstract class TreeElement
{
protected string name;
public TreeElement(string name)
{
this.name = name;
}
public abstract void Add(TreeElement t);
public abstract void Remove(TreeElement t);
public virtual void Display(int indent)
{
Console.WriteLine(new String(' ', indent) + name);
}
}
class SimpleElement : TreeElement
{
public SimpleElement(string name)
: base(name)
{
}
public override void Add(TreeElement c)
{
Console.WriteLine("不能添加节点");
}
public override void Remove(TreeElement c)
{
Console.WriteLine("不能删除节点");
}
}
class CompositeElement : TreeElement
{
private ArrayList elements = new ArrayList();
public CompositeElement(string name)
: base(name)
{
}
public override void Add(TreeElement d)
{
elements.Add(d);
}
public override void Remove(TreeElement d)
{
elements.Remove(d);
}
public override void Display(int indent)
{
base.Display(indent);
foreach (TreeElement c in elements)
{
c.Display(indent + 2);
}
}
}
class MainApp
{
static void Main()
{
CompositeElement root = new CompositeElement("树根");
CompositeElement comp1 = new CompositeElement("树枝1");
comp1.Add(new SimpleElement("树叶1"));
comp1.Add(new SimpleElement("树叶2"));
root.Add(comp1);
CompositeElement comp2 = new CompositeElement("树枝2");
comp2.Add(new SimpleElement("树叶3"));
comp2.Add(new SimpleElement("树叶4"));
root.Add(comp2);
root.Add(new SimpleElement("树叶5"));
root.Add(new SimpleElement("树叶6"));
SimpleElement pe = new SimpleElement("树叶7");
root.Add(pe);
root.Add(new SimpleElement("树叶8"));
root.Display(1);
Console.WriteLine();
root.Remove(comp2);
root.Remove(pe);
root.Display(1);
Console.Read();
}
}


浙公网安备 33010602011771号