Director.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace BuilderPattern
  7. {
  8. /// <summary>
  9. /// 指挥者(采购经理)
  10. /// </summary>
  11. public class Director
  12. {
  13. public Computer Construct(Builder builder)
  14. {
  15. return builder.BuildComputer();
  16. }
  17. }
  18. /// <summary>
  19. /// 建造者(模拟装机过程),也可通过接口实现
  20. /// Director不关心具体组装的细节,所以将具体的组装细节方法标记为protected
  21. /// </summary>
  22. public abstract class Builder
  23. {
  24. /// <summary>
  25. /// 组装主机
  26. /// </summary>
  27. protected abstract void BuildMainFramePart();
  28. /// <summary>
  29. /// 组装显示器
  30. /// </summary>
  31. protected abstract void BuildScreenPart();
  32. /// <summary>
  33. /// 组装输入设备(键鼠)
  34. /// </summary>
  35. protected abstract void BuildInputPart();
  36. /// <summary>
  37. /// 获取组装电脑
  38. /// 由具体的组装类决定组装顺序
  39. /// </summary>
  40. /// <returns></returns>
  41. public abstract Computer BuildComputer();
  42. }
  43. /// <summary>
  44. /// 惠普电脑组装商
  45. /// </summary>
  46. public class HpBulider : Builder
  47. {
  48. Computer hp = new Computer() { Band = "惠普" };
  49. protected override void BuildMainFramePart()
  50. {
  51. hp.AssemblePart("主机");
  52. }
  53. protected override void BuildScreenPart()
  54. {
  55. hp.AssemblePart("显示器");
  56. }
  57. protected override void BuildInputPart()
  58. {
  59. hp.AssemblePart("键鼠");
  60. }
  61. /// <summary>
  62. /// 决定具体的组装步骤
  63. /// </summary>
  64. /// <returns></returns>
  65. public override Computer BuildComputer()
  66. {
  67. BuildMainFramePart();
  68. BuildScreenPart();
  69. BuildInputPart();
  70. return hp;
  71. }
  72. }
  73. /// <summary>
  74. /// 戴尔电脑组装商
  75. /// </summary>
  76. public class DellBulider : Builder
  77. {
  78. Computer dell = new Computer() { Band = "戴尔" };
  79. protected override void BuildMainFramePart()
  80. {
  81. dell.AssemblePart("主机");
  82. }
  83. protected override void BuildScreenPart()
  84. {
  85. dell.AssemblePart("显示器");
  86. }
  87. protected override void BuildInputPart()
  88. {
  89. dell.AssemblePart("键鼠");
  90. }
  91. public override Computer BuildComputer()
  92. {
  93. BuildInputPart();
  94. BuildMainFramePart();
  95. BuildScreenPart();
  96. return dell;
  97. }
  98. }
  99. /// <summary>
  100. /// 产品类
  101. /// </summary>
  102. public class Computer
  103. {
  104. /// <summary>
  105. /// 品牌
  106. /// </summary>
  107. public string Band { get; set; }
  108. /// <summary>
  109. /// 电脑组件列表
  110. /// </summary>
  111. private List<string> assemblyParts = new List<string>();
  112. /// <summary>
  113. /// 组装部件
  114. /// </summary>
  115. /// <param name="partName">部件名称</param>
  116. public void AssemblePart(string partName)
  117. {
  118. this.assemblyParts.Add(partName);
  119. }
  120. public void ShowSteps()
  121. {
  122. Console.WriteLine("开始组装『{0}』电脑:", Band);
  123. foreach (var part in assemblyParts)
  124. {
  125. Console.WriteLine(string.Format("组装『{0}』;", part));
  126. }
  127. Console.WriteLine("组装『{0}』电脑完毕!", Band);
  128. }
  129. }
  130. }