【转】C#设计模式深入学习---Component组合模式(结构型模式)

标签:
c设计模式 |
分类: 设计模式 |
最近在赶项目比较忙,今天抽空写下文章,这次我们介绍下Component组合模式。Component组合模式是一个非常好用而且经常可以在大型项目中看到的设计模式。
首先我们来简单过一下什么是Component组合模式以及用该模式的情况和好处。 Component组合模式就是将对象组合成树形结构以表示"部分-整体"的层次结构。
Composite使得用户对单个对象和组合对象的使用具有一致性。比如我们在制作一个具有各种人物的游戏时,每个人物又各有各自特点鲜明的技能(魔兽争霸,英雄联盟,刀塔)。
http://s8/mw690/004eOfgGzy74Nl9flYja7&690
那我们如果要制作一套这样的技能系统,怎么制定架构合适呢, 记得我们上一节说到Bridge桥接模式的用法,其实组合模式像桥接模式的 组合-整体的概念。
但Component组合模式的中心就是 组合-整体。制作成树状类型的管理,更方便我们的添加,修改,删除。下面先看下Component组合模式的使用例子。
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)
{
Console.WriteLine("叶子节点无法添加节点");
}
public override void Remove(Component c)
{
Console.WriteLine("叶子节点无法删除节点");
}
public override void Display(int depth)
{
Console.WriteLine(new String('_', depth) + name);
}
}
class Composite : Component
{
private List children = new List();
public Composite(string name)
: base(name)
{
}
public override void Add(Component c)
{
children.Add(c);
}
public override void Remove(Component c)
{
children.Remove(c);
}
Composite使得用户对单个对象和组合对象的使用具有一致性。比如我们在制作一个具有各种人物的游戏时,每个人物又各有各自特点鲜明的技能(魔兽争霸,英雄联盟,刀塔)。
http://s8/mw690/004eOfgGzy74Nl9flYja7&690
那我们如果要制作一套这样的技能系统,怎么制定架构合适呢, 记得我们上一节说到Bridge桥接模式的用法,其实组合模式像桥接模式的 组合-整体的概念。
但Component组合模式的中心就是 组合-整体。制作成树状类型的管理,更方便我们的添加,修改,删除。下面先看下Component组合模式的使用例子。
abstract class Component