Organization.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System;
  2. using System.Collections.Generic;
  3. namespace CompositePattern
  4. {
  5. /// <summary>
  6. /// 组织架构
  7. /// </summary>
  8. public abstract class Organization
  9. {
  10. /// <summary>
  11. /// 成员姓名
  12. /// </summary>
  13. public string MemberName { get; set; }
  14. /// <summary>
  15. /// 成员职位
  16. /// </summary>
  17. public string MemberPosition { get; set; }
  18. /// <summary>
  19. /// 直接上级
  20. /// </summary>
  21. public Organization ParentNode { get; set; }
  22. public void Display()
  23. {
  24. var basicInfo = string.Format("姓名:{0},职位:{1}", MemberName, MemberPosition);
  25. var parentInfo = ParentNode == null
  26. ? ""
  27. : string.Format(",直接上级:『姓名:{0},职位:{1}』", ParentNode.MemberName, ParentNode.MemberPosition);
  28. Console.WriteLine(basicInfo + parentInfo);
  29. }
  30. }
  31. /// <summary>
  32. /// 部门
  33. /// </summary>
  34. public class Department : Organization
  35. {
  36. private readonly List<Organization> _organizationInfo = new List<Organization>();
  37. public Department(string departmentName, string charge)
  38. {
  39. MemberPosition = departmentName;
  40. MemberName = charge;
  41. }
  42. public void Add(Organization org)
  43. {
  44. _organizationInfo.Add(org);
  45. org.ParentNode = this;
  46. }
  47. public void Remove(Organization org)
  48. {
  49. _organizationInfo.Remove(org);
  50. }
  51. public List<Organization> GetDepartmentMembers()
  52. {
  53. return _organizationInfo;
  54. }
  55. }
  56. /// <summary>
  57. /// 员工
  58. /// </summary>
  59. public class Member : Organization
  60. {
  61. }
  62. }