组合模式实例
//抽象组件基类
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方法遍历层次输出结果,这里用的是先序遍历。


首页 我的博客
粤ICP备17103704号