使用UML表示类关系
在上一篇责任链设计模式中,尝试画UML关系图,发现画错了。所以这里记录下,加深印象。
Generalization(继承)
UML中用带空心箭头的实线表示Generalization关系,箭头指向父类。
Interface Realzation(实现)
UML中用空心箭头的虚线表示Interface Realzation关系,箭头指向父接口
Dependency(依赖)
UML中用带箭头的虚线表示Dependency关系,箭头指向被依赖元素。
依赖在代码中主要体现为 Class2的某个函数的返回值、形参、局部变量或对Class1静态方法的调用,则表示Class2引用了Class1
Association(双向关联)
UML中用实线表示Association关系。
依赖与关联的区别
依赖是指其中的一个类作为另一个类的方法的参数或者返回值,或者是某个方法的变量而已。而发生关联关系的两个类,是指类A成为类B的全局属性
从关系的生命周期来看,依赖关系是仅当类的方法被调用时而产生,伴随着方法的结束而结束。关联关系当类实例化的时候产生,当类对象销毁的时候关系结束。相比依赖,关联关系的生存期更长
Directed Association(单向关联)
UML中用带箭头实线表示Directed Association关系。箭头指向被关联类,即Class2拥有Class1的全局变量。
Aggregation(聚合)
UML中用带空心菱形头的实线表示Aggregation关系,菱形头指向整体。聚合关系在代码上与关联关系表现一致
聚合用来表示集体与个体之间的关联关系,即集体和个体是一种has-a的关系,例如班级与学生之间存在聚合关系。
Composition(组合)
UML中用带实心菱形头的实线表示Composition关系,菱形头指向整体。
组合用来表示整体与个体之间的关联关系,即整体和个体是一种contains-a的关系,例如人和头关系。
聚合与组合的区别
聚合关系没有组合紧密。学生不会因为班级的解散而无法存在,聚合关系的类具有不同的生命周期,互不相干;而学生如果没有头将无法存活,组合关系的类具有相同的生命周期。
在聚合关系中,可以同时了解Classes类和Student类,因为他们是独立的。在组合关系中,只认识Student类,根本不知道Head类的存在,因为头被严密地封装在学生类中。
总来说聚合的成员可独立,组合的成员必须依赖于整体才有意义。