UML基本介绍
Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果。
这里只谈类图,因为类图对设计模式的学习帮助很大。
类图画法
类本身
类源代码
class Employee {
private String id;
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
}
UML类图
类与类之间的关系
依赖(Dependency)
在类中用到了对方,就存在依赖关系,假如类A中用到了类B,那么类A指向类B有一根线,如下:
用到了的具体情况:
①如果类B是类A的成员属性。
②如果类B是类A中方法的返回类型。
③如果类B是类A中方法接收的参数类型。
④类B在类A的方法中使用到。
泛化(Generalization)
即继承关系,是依赖关系的特例。
如果类A继承类B,A和B存在泛化关系,如下:
实现(Realization)
类A实现接口B,就是实现关系,是依赖关系的特例。图如下:
关联(Association)
对象之间一种引用关系,比如客户类与订单类之间的关系,客户类和身份证类之间的关系。
具有导航型,关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
具有多重性。如“1”表示有且仅有一个,“0...”表示0个或者多个,“0,1”表示0个或者1个,“n...m”表示n~m个都可以,“m...*”表示至少m个。
如下图:
一个客户只有一个身份证,一个客户有多个订单。
聚合(Aggregation)
表示整体与部分的关系,整体和部分可以分开,是关联关系的特例。
例如电脑由键盘、鼠标、显示器等组成,这些配件能组成电脑,但可以从电脑上分离出来。如下:
组合(Composition)
也表示整体与部分的关系,但是整体和部分不能分离,比如公司与部门,部门是公司的一部分,但公司没了,部门自然就不存在了。如下:
补充:聚合与组合的区别
概念层面上:
聚合整体与部分的关系比较弱,而组合比较强。
组合要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。也就是“同生共死”的状态,比如公司没了,部门就没了,但公司员工不会消失。
代码层面上
公司与部门是组合关系,公司与员工是聚合关系。