菜鸟也疯狂之组合模式
菜鸟也疯狂之组合模式
组合设计模式实际上讲的是某种结构,当程序中的对象与对象之间的关系满足如下即将要阐述的树形结构时,那么就可以尝试s用组合模式来设计程序框架。 我们先代码走起,结尾加 在以解释...
/// <summary>
/// 物件抽象类,
/// </summary>
public abstract class MyObj
{
public string Name { get; set; }
public MyObj(string name)
{
this.Name = name;
}
public abstract void PrintName();
public abstract void Add(MyObj g);
public abstract void Remove(MyObj g);
}
/// <summary>
/// 灯泡物件
/// </summary>
public class Bulb : MyObj
{
public Bulb(string name)
: base(name)
{ }
public override void PrintName()
{
Debug.Log("这是:" + Name);
}
public override void Add(MyObj g)
{
}
public override void Remove(MyObj g)
{
}
}
/// <summary>
/// 针
/// </summary>
public class Needle : MyObj
{
public Needle(string name)
: base(name)
{ }
public override void PrintName()
{
Debug.Log("这是:" + Name);
}
public override void Add(MyObj g)
{
}
public override void Remove(MyObj g)
{
}
}
/// <summary>
/// 纸盒
/// </summary>
public class PaperBox : MyObj
{
private List<MyObj> list = new List<MyObj>();
public PaperBox(string name)
: base(name)
{ }
public override void PrintName()
{
foreach (MyObj f in list)
{
f.PrintName();
}
Debug.Log("这是:" + Name);
}
public override void Add(MyObj g)
{
list.Add(g);
}
public override void Remove(MyObj g)
{
list.Remove(g);
}
}
void Start()
{
MyObj bulb = new Bulb("红色的灯泡");
MyObj box = new PaperBox("纸盒1");
box.Add(bulb);
box.PrintName();
MyObj box2 = new PaperBox("纸盒2");
box2.Add(box);
MyObj needle = new Needle("用于缝补的针");
box2.Add(needle);
box2.PrintName();
}
上述示例代码实现了类似如下图所示的树形结构,在这里,针和灯泡属于简单对象,纸盒属于复杂对象,复杂对象是由一个或者多个简单对象组合而成,然而,如何能够在客户端以相同的方式来处理简单类型和复杂类型的对象(客户端使用box2对象来统一处理box对象和needle对象,它不因为box是负责对象而额外做处理),这个就是组合模式的职责所在。所以说,组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口。这就是组合模式能够将组合对象和简单对象进行一致处理的原因。