1、打开Unity,新建一个空工程,具体如下图
2、在工程中,新建几个脚本,然后双击打开,具体如下图
3、脚本的具体代码和代码说明如下图
4、CompanyComponent 脚本具体内容如下:publicabstractclassCompany潮贾篡绐Component{protectedstringname;publicCompanyComponent(stringname){ this.name=name; }publicabstractvoidAdd(CompanyComponentcompany); publicabstractvoidRemove(CompanyComponentcompany); publicabstractvoidDisplay(intdepth); publicabstractvoidLineOfDuty();}
5、ConcreteCompanyCompo衡痕贤伎site脚本具体内容如下:usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingSystem;publicclassConcreteCompanyComposite:CompanyComponent{privateList<CompanyComponent>children=newList<CompanyComponent>();publicConcreteCompanyComposite(stringname):base(name){ }publicoverridevoidAdd(CompanyComponentcompany) { children.Add(company); }publicoverridevoidRemove(CompanyComponentcompany) { children.Remove(company); }publicoverridevoidDisplay(intdepth) { Debug.Log(newString('-',depth)+name);foreach(CompanyComponentcomponentinchildren){ component.Display(depth+2); } }publicoverridevoidLineOfDuty() { foreach(CompanyComponentcomponentinchildren){ component.LineOfDuty(); } }}
6、HRDepartmntLeaf脚本具体内容如下:u衡痕贤伎singUnityEngine;usingSystem;publicclassHRDepartmntLeaf:CompanyComponent{publicHRDepartmntLeaf(stringname):base(name){}publicoverridevoidAdd(CompanyComponentcompany) { }publicoverridevoidRemove(CompanyComponentcompany) { }publicoverridevoidDisplay(intdepth) { Debug.Log(newString('-',depth)+name); }publicoverridevoidLineOfDuty() { Debug.Log(name+"员工招聘培训管理"); }}
7、Test脚本具体内容如下:usingUnityEngine;publicc盟敢势袂lassTest:MonoBehaviour{//Usethisforinitialization voidStart(){ ConcreteCompanyCompositeroot=newConcreteCompanyComposite("总公司"); root.Add(newHRDepartmntLeaf("总公司人力资源部"));ConcreteCompanyCompositecompany1=newConcreteCompanyComposite("分公司1"); company1.Add(newHRDepartmntLeaf("分公司1人力资源部")); root.Add(company1);ConcreteCompanyCompositecompany2=newConcreteCompanyComposite("分公司2"); company2.Add(newHRDepartmntLeaf("分公司2人力资源部")); root.Add(company2);ConcreteCompanyCompositecompany3=newConcreteCompanyComposite("分公司3"); company3.Add(newHRDepartmntLeaf("分公司3人力资源部")); company2.Add(company3);Debug.Log("\n公司结构图"); root.Display(1);Debug.Log("\n公司职责"); root.LineOfDuty(); } }
8、脚本编译正确,回到Unity界面,在场景中新建一个 GameObject,并把 Test 脚本赋给 GameObject,具体如下图
9、运行场景,控制台 Console 打印如下图
10、到此,《Unity 设计模式之 组合模式的实例介绍》讲解结束,谢谢