《大话设计模式》 作者:程杰

面向对象

参考活字印刷:

  • 可维护:要改,只需更改要改的位置。
  • 可复用:用完一次后,可以在后面继续使用。
  • 可扩展:如果要加字,直接往后添加就可以了。
  • 灵活性好:可以横排,也可以竖排。

统一建模语言 UML(Unified Modeling Language)

类图

制图工具:draw.io
UML_drawio.xml
image.png

  1. 第一层代表类名称,如果是抽象类就使用斜体表示
  2. 第二层代表特性,类的属性和字段
  3. 第三层代表操作,类的方法

矩形框最前面的

  • “+”:代表公开(public)
  • “-“:代表私有(private)
  • “#”:代表受保护的(protected)

补充

  1. 静态类/方法,名称添加下划线
  2. 属性/字段和有返回值的方法可以在最后添加冒号和类型

image.png

接口

有2种表示方法:

  1. 矩形表示法:顶端有<>,其他和类相同
  2. 棒棒糖表示法:圆圈旁为接口名称,接口方法在实现类中出现

1.image.png
2.image.png

继承

空心三角加实线
image.png

实现接口

空心三角加虚线
image.png

关联

实线箭头
image.png

聚合

空心棱形加实线箭头
image.png

组合

实心棱形加实线箭头
image.png

依赖

虚线箭头
image.png

C#实现

  1. /// <summary>
  2. /// 氧气
  3. /// </summary>
  4. public class Oxygen
  5. {
  6. }
  7. /// <summary>
  8. /// 水
  9. /// </summary>
  10. public class Water
  11. {
  12. }
  13. /// <summary>
  14. /// 动物
  15. /// </summary>
  16. public abstract class Animal
  17. {
  18. /// <summary>
  19. /// 生命
  20. /// </summary>
  21. public int Life;
  22. /// <summary>
  23. /// 新陈代谢
  24. /// </summary>
  25. /// <param name="oxygen">氧气</param>
  26. /// <param name="water">水</param>
  27. public void Metabolism(Oxygen oxygen, Water water)
  28. {
  29. }
  30. /// <summary>
  31. /// 繁殖
  32. /// </summary>
  33. public void Reproduction()
  34. {
  35. }
  36. }
  37. /// <summary>
  38. /// 鸟
  39. /// </summary>
  40. public class Bird : Animal
  41. {
  42. /// <summary>
  43. /// 翅膀
  44. /// </summary>
  45. private Wing wing;
  46. /// <summary>
  47. /// 羽毛
  48. /// </summary>
  49. public int Feather;
  50. /// <summary>
  51. /// 描述 有角质喙没有牙齿
  52. /// </summary>
  53. public string Describe;
  54. public Bird()
  55. {
  56. wing = new Wing();
  57. }
  58. /// <summary>
  59. /// 下蛋
  60. /// </summary>
  61. public virtual void LayEggs()
  62. {
  63. }
  64. }
  65. /// <summary>
  66. /// 翅膀
  67. /// </summary>
  68. public class Wing
  69. {
  70. }
  71. /// <summary>
  72. /// 雁群
  73. /// </summary>
  74. public class WildGeeseAggregate
  75. {
  76. private WildWildGees[] wildWildGees;
  77. public void VForm_Flight()
  78. {
  79. }
  80. public void OneForm_Flight()
  81. {
  82. }
  83. }
  84. /// <summary>
  85. /// 雁
  86. /// </summary>
  87. public class WildWildGees : Bird, IFlight
  88. {
  89. /// <summary>
  90. /// 飞
  91. /// </summary>
  92. public void Fly()
  93. {
  94. }
  95. /// <summary>
  96. /// 下蛋
  97. /// </summary>
  98. public override void LayEggs()
  99. {
  100. base.LayEggs();
  101. }
  102. }
  103. /// <summary>
  104. /// 鸭
  105. /// </summary>
  106. public class Duck : Bird
  107. {
  108. /// <summary>
  109. /// 下蛋
  110. /// </summary>
  111. public override void LayEggs()
  112. {
  113. base.LayEggs();
  114. }
  115. }
  116. /// <summary>
  117. /// 企鹅
  118. /// </summary>
  119. public class Penguin : Bird
  120. {
  121. private Climate climate;
  122. /// <summary>
  123. /// 下蛋
  124. /// </summary>
  125. public override void LayEggs()
  126. {
  127. base.LayEggs();
  128. }
  129. }
  130. /// <summary>
  131. /// 气候
  132. /// </summary>
  133. public class Climate
  134. {
  135. }
  136. /// <summary>
  137. /// 飞翔
  138. /// </summary>
  139. public interface IFlight
  140. {
  141. /// <summary>
  142. /// 飞
  143. /// </summary>
  144. void Fly();
  145. }
  146. /// <summary>
  147. /// 说话
  148. /// </summary>
  149. public interface ISpeak
  150. {
  151. /// <summary>
  152. /// 说话
  153. /// </summary>
  154. void Speak();
  155. }
  156. /// <summary>
  157. /// 唐老鸭
  158. /// </summary>
  159. public class DonaldDuck : Duck, ISpeak
  160. {
  161. /// <summary>
  162. /// 说话
  163. /// </summary>
  164. public void Speak()
  165. {
  166. }
  167. }