Program.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System;
  2. namespace CompositePattern
  3. {
  4. internal class Program
  5. {
  6. private static void Main(string[] args)
  7. {
  8. Console.WriteLine("组合模式:");
  9. Console.WriteLine("-------------------");
  10. var organzation = new Department("CEO", "老总");
  11. var developDepart = new Department("研发部经理", "研哥");
  12. organzation.Add(developDepart);
  13. var projectA = new Department("Erp项目组长", "E哥");
  14. developDepart.Add(projectA);
  15. var memberX = new Member {MemberPosition = "开发工程师", MemberName = "开发X"};
  16. var memberY = new Member {MemberPosition = "开发工程师", MemberName = "开发Y"};
  17. var memberZ = new Member {MemberPosition = "测试工程师", MemberName = "测试Z"};
  18. projectA.Add(memberX);
  19. projectA.Add(memberY);
  20. projectA.Add(memberZ);
  21. Console.WriteLine("组合模式:从上往下遍历");
  22. DisplayStructure(organzation);
  23. Console.WriteLine("-------------------");
  24. Console.WriteLine();
  25. Console.WriteLine("组合模式:从下往上遍历");
  26. FindParent(memberX);
  27. Console.WriteLine("-------------------");
  28. Console.ReadLine();
  29. }
  30. /// <summary>
  31. /// 正序排序
  32. /// </summary>
  33. /// <param name="org"></param>
  34. private static void DisplayStructure(Organization org)
  35. {
  36. if (org.ParentNode == null)
  37. org.Display();
  38. var departMent = (Department) org;
  39. foreach (var depart in departMent.GetDepartmentMembers())
  40. {
  41. depart.Display();
  42. if (!(depart is Member))
  43. DisplayStructure((Department) depart);
  44. }
  45. }
  46. /// <summary>
  47. /// 倒序排序
  48. /// </summary>
  49. /// <param name="member"></param>
  50. private static void FindParent(Organization member)
  51. {
  52. member.Display();
  53. while (member.ParentNode != null)
  54. {
  55. member.ParentNode.Display();
  56. member = member.ParentNode;
  57. }
  58. }
  59. }
  60. }