设计模式 - Composite模式

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 模式重在表示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值