博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式---合成模式(DesignPattern_Composite)
阅读量:6165 次
发布时间:2019-06-21

本文共 3215 字,大约阅读时间需要 10 分钟。

摘录自:设计模式与游戏完美开发

十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏美术——刘明恺 联合推荐全书采用了整合式的项目教学,即以一个游戏的范例来应用23种设计模式的实现贯穿全书,让读者学习到整个游戏开发的全过程和作者想要传承的经验,并以浅显易懂的比喻来解析难以理解的设计模式,让想深入了解此领域的读者更加容易上手。


COMPOSITE—Mary今天过生日。“我过生日,你要送我一件礼物。”“嗯,好吧,去商店,你自己挑。”“这件T恤挺漂亮,买,这条裙子好看,买,这个包也不错,买。”“喂,买了三件了呀,我只答应送一件礼物的哦。”“什么呀,T恤加裙子加包包,正好配成一套呀,小姐,麻烦你包起来。”“……”,MM都会用Composite模式了,你会了没有?

合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。

using UnityEngine;using System.Collections.Generic;namespace DesignPattern_Composite{    // 含有合成模式的基类    public abstract class IComponent    {        protected string m_Value;        public abstract void Operation();   // 一般操作                                            // 加入節點        public virtual void Add(IComponent theComponent)        {            Debug.LogWarning("子類別沒實作");        }        // 移除节点        public virtual void Remove(IComponent theComponent)        {            Debug.LogWarning("子類別沒實作");        }        // 取得子节点        public virtual IComponent GetChild(int Index)        {            Debug.LogWarning("子類別沒實作");            return null;        }    }    // 单独节点    public class Leaf : IComponent    {        public Leaf(string Value)        {            m_Value = Value;        }        public override void Operation()        {            Debug.Log("Leaf[" + m_Value + "]执行Operation()");        }    }    // 含有合成结构的节点    public class Composite : IComponent    {        List
m_Childs = new List
(); public Composite(string Value) { m_Value = Value; } // 一般操作 public override void Operation() { Debug.Log("Composite[" + m_Value + "]"); foreach (IComponent theComponent in m_Childs) theComponent.Operation(); } // 加入节点 public override void Add(IComponent theComponent) { m_Childs.Add(theComponent); } // 移除节点 public override void Remove(IComponent theComponent) { m_Childs.Remove(theComponent); } // 取得子节点 public override IComponent GetChild(int Index) { return m_Childs[Index]; } }}
using UnityEngine;using System.Collections;using DesignPattern_Composite;public class CompositeTest : MonoBehaviour{    void Start()    {        UnitTest();    }    //     void UnitTest()    {        // 根节点        IComponent theRoot = new Composite("Root");        // 加入两个单独节点        theRoot.Add(new Leaf("Leaf1"));        theRoot.Add(new Leaf("Leaf2"));        // 子节点1        IComponent theChild1 = new Composite("Child1");        // 加入两个单独节点        theChild1.Add(new Leaf("Child1.Leaf1"));        theChild1.Add(new Leaf("Child1.Leaf2"));        theRoot.Add(theChild1);        // 子节点2        // 加入3个单独节点        IComponent theChild2 = new Composite("Child2");        theChild2.Add(new Leaf("Child2.Leaf1"));        theChild2.Add(new Leaf("Child2.Leaf2"));        theChild2.Add(new Leaf("Child2.Leaf3"));        theRoot.Add(theChild2);        // 显示        theRoot.Operation();    }}

转载地址:http://wuyba.baihongyu.com/

你可能感兴趣的文章
社会学视角下的大数据方法论及其困境
查看>>
《云计算:原理与范式》一1.7 平台即服务供应商
查看>>
百度成立“百度搜索公司”:固本拓新驱动生态裂变
查看>>
宇宙风暴?才怪!瑞典暗指俄罗斯黑客攻击航空控制系统
查看>>
5G将为欧洲带来超千亿欧元社会经济效益
查看>>
系统进程管理工具Process Explorer
查看>>
富士通仍执着SPARC架构芯片 将坚持推新
查看>>
易宪容:企业要利用大数据挖掘潜在需求
查看>>
微软声称Win10周年更新为Edge浏览器带来更好电池寿命
查看>>
混合云是企业IT的未来吗?
查看>>
LINE在日本取得成功 但全球化之路还很长
查看>>
红帽云套件新增QuickStart Cloud Installer,加快私有云部署
查看>>
MapXtreme 2005 学习心得 一些问题(八)
查看>>
流量精细化运营时代,营销SaaS之使命——流量掘金
查看>>
哥伦比亚大学牙科学院使用RFID系统,更好管理牙科器械
查看>>
雅虎同意出售核心资产
查看>>
Win10大丰收的节奏 微软收编iOS全部150万应用
查看>>
智慧城市要除“城市病” 中兴通讯开辟新增长极
查看>>
华平蝉联“视频会议十大卓越品牌”
查看>>
Opera已确认解散iOS开发团队
查看>>