类之间关系(由强到弱)

  • realize(继承):三角+实线(指向类),继承类(SUV是一种汽车)
  • generalization(实现):三角+虚线(指向接口),实现接口(汽车是一种车)
  • composition(组合):实菱形+实线(指向个体),强依赖(汽车没了,发动机就没了),特殊的聚合,构造函数
  • aggregation(聚合):空菱形+实线(指向个体),非强依赖(班级没了,学生还在),特殊的关联,一对多关系,一个对象拥有一组其他对象,并扮演容器或集合的角色
  • association(关联):箭头+实线(指向被依赖者),静态,天然的联系(学生带着身份证),如一个类对象是另一个类的成员变量(意味着后者总能访问前者)
  • dependency(依赖):箭头+虚线(指向被依赖者),动态,运行时的联系(学生只在上学时用自行车),修改一个类的定义可能会造成另一个类的变化,如一个类是另一个类方法的参数

 [设计模式] 读懂UML图_设计模式

(有的箭头没打上,以下图为准)

[设计模式] 读懂UML图_生命周期_02

总结 

  • 分为三组记忆,箭头--菱形--三角,关联由弱到强;每组中采用实/虚,实心/空心表示关联强弱
  • 泛化、实现是is-a,聚合、组合是has-a
  • 每项分两个格,填写属性和方法,-表示私有,+表示公有
  • 箭头发出的一方是主体,即A
  • 从上到下,A和B的力量对比发生变化,B不断“变强”,由小弟成长为父亲
  • 代码体现
  • 依赖:B是A中某个方法的参数或返回值(B是A动作的条件或对象,只有A有所动作时,B对A才有意义)
  • 关联:B是A的一个普通属性(B是A的一部分,A只要创建了,B对A就有意义)
  • 聚合:B是A的属性,且为一对多关系,即A通过容器存储一组B;A和B的生命周期不同,即A可以创建B,但不负责销毁
  • 组合:B是A的属性,A和B的生命周期相同,同生共死,即A在构造方法里创建B,在析构方法里销毁B
  • 实现:B是接口,A是实现类(B是A的行为标准,A需要看B眼色行事)
  • 继承:B是父类,A是子类(A是B生出来的,无条件继承B的一切)