using System; namespace CompositePattern { internal class Program { private static void Main(string[] args) { Console.WriteLine("组合模式:"); Console.WriteLine("-------------------"); var organzation = new Department("CEO", "老总"); var developDepart = new Department("研发部经理", "研哥"); organzation.Add(developDepart); var projectA = new Department("Erp项目组长", "E哥"); developDepart.Add(projectA); var memberX = new Member {MemberPosition = "开发工程师", MemberName = "开发X"}; var memberY = new Member {MemberPosition = "开发工程师", MemberName = "开发Y"}; var memberZ = new Member {MemberPosition = "测试工程师", MemberName = "测试Z"}; projectA.Add(memberX); projectA.Add(memberY); projectA.Add(memberZ); Console.WriteLine("组合模式:从上往下遍历"); DisplayStructure(organzation); Console.WriteLine("-------------------"); Console.WriteLine(); Console.WriteLine("组合模式:从下往上遍历"); FindParent(memberX); Console.WriteLine("-------------------"); Console.ReadLine(); } /// /// 正序排序 /// /// private static void DisplayStructure(Organization org) { if (org.ParentNode == null) org.Display(); var departMent = (Department) org; foreach (var depart in departMent.GetDepartmentMembers()) { depart.Display(); if (!(depart is Member)) DisplayStructure((Department) depart); } } /// /// 倒序排序 /// /// private static void FindParent(Organization member) { member.Display(); while (member.ParentNode != null) { member.ParentNode.Display(); member = member.ParentNode; } } } }