1、问题
在开发中,我们经常可能要递归构建树状的组合结构,Composite 模式则提供了很好的 解决方案。
2、代码
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
namespace Composite{
public abstract class Component{
public abstract void operation();
public virtual void addComponent(Component com){}
public virtual void removeComponent(Component com){}
public virtual Component getChild(int index){
return null;
}
}
public class Composite : Component{
private List<Component> listComponent;
public override void operation(){
foreach(Component com in listComponent){
com.operation();
}
}
public override void addComponent(Component com){
if(null == listComponent){
listComponent = new List<Component>();
}
if(null != listComponent){
listComponent.Add(com);
}
}
public override void removeComponent(Component com){
if(null != listComponent){
listComponent.Remove(com);
}
}
public override Component getChild(int index){
if(index < listComponent.Count){
return listComponent[index];
}
return null;
}
}
public class Leaf : Component{
public override void operation(){
Debug.Log("Leaf operation");
}
}
public class CompositeDemo : MonoBehaviour {
//组合模式
void Start(){
Leaf leaf = new Leaf();
leaf.operation();
Composite site = new Composite();
site.addComponent(leaf);
site.operation();
Component com = site.getChild(0);
com.operation();
}
}
}
3、总结
Composite 模式通过和 Decorator 模式有着类似的结构图,但是 Composite 模式旨在构造 类,而 Decorator 模式重在不生成子类即可给对象添加职责。Decorator 模式重在修饰,而 Composite 模式重在表示。