//抽象组件基类
public abstract class Component {
public int level;
public string name;
public Component(string n,int l=0)
{
level = l;
name = n;
}
public abstract void Add(Component cc);
public abstract void Remove(Component cc);
public abstract void Do();
}//容器类
using System.Collections.Generic;
using UnityEngine;
public class Composite : Component
{
private List<Component> list = new List<Component>();
public Composite(string n) : base(n) { }
public override void Add(Component cc)
{
cc.level = this.level + 1;
list.Add(cc);
}
public override void Do()
{
Debug.Log("层次" + level + ":" + name);
foreach (Component c in list)
{
c.Do();
}
}
public override void Remove(Component cc)
{
list.Remove(cc);
}
}//叶子类
using UnityEngine;
public class Leaf : Component
{
public Leaf(string n) : base(n) { }
public override void Add(Component cc)
{
Debug.Log("叶节点无法添加组件");
}
public override void Do()
{
Debug.Log("层次" + level + ":" + name);
}
public override void Remove(Component cc)
{
Debug.Log("叶节点无法移除组件");
}
}//测试使用
using UnityEngine;
public class testComposite : MonoBehaviour {
void Start () {
Component root = new Composite("root");
Leaf leaf = new Leaf("leaf1");
root.Add(leaf);
Composite com = new Composite("com1");
root.Add(com);
Leaf leaf2 = new Leaf("leaf2");
com.Add(leaf2);
root.Do();
}
}组合模式其实就是构建一颗树,这里实现统一化让叶子节点和容易都有一样的方法,让小东西组合成大的东西,Do方法遍历层次输出结果,这里用的是先序遍历。