您的位置:首页 > 其它

设计模式 - Composite模式

2016-05-23 19:39 337 查看
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 模式重在表示。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式