在学习设计模式的时候UML图是必须要了解的。
UML:统一建模语言(Unified Modeling Language)
UML主要包括如下图:
其中,案例图、类图和序列图是最有用的。
如下面的解释可以深入理解类图的关系:
(1)类class的解释:
如图的"动物"框,它就代表一个类。类图分为三层,第一层显示类的名称,如果是抽象类,则用斜体表示。第二层是类的特性,通常就是字段和属性。第三层就是类的操作,通常是行为和方法。注意前面的符号,"+" 表示public ,"-" 表示private,"#"表示friendly (默认值,本包可见)。,
(2)接口
如图左下角的"飞翔"就是一个接口。接口与类的区别是顶端有<<interface>>。第一层是接口名称,第二层是接口方法(这种是不赞成在接口中定义属性)
补充:接口还有另外一种表示方法,在PowerDesigner中的接口是在名称区加一个带横杠的三角,如下:
(3)继承关系:空心三角形+实线表示
(4)实现关系:空心三角形+虚线表示
(5)关联关系:当一个类知道另一个类时就需要用关联(association),关联用实线箭头表示。
企鹅需要知道天气的变化。
在代码中表现为:关系对象出现在实例变量中。
(6)聚合关系:用空心的棱形+实心箭头表示
看大雁与雁群的关系。大雁是群居动物,每个大雁都属于一个雁群,一个雁群可以有多个大雁。所以说他们满足聚合关系(Aggretation)。聚合是一种弱的"拥有关系",体现的是A可以包含B,但B不是A对象的一部分。
在代码中表现为:关系对象出现在实例变量中。
(7)组合(合成)关系:用实心的棱形+实心箭头表示
组合关系是一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。比如鸟和鸡翅的关系,其生命周期是一样的。连线两端有基数,如下表示一个鸟有2个翅膀。关联关系、聚合关系也可以有基数。
在代码中表现为:关系对象出现在实例变量中。
(8)依赖关系:虚线+箭头表示
动物依赖于洋气和水,因此形成依赖关系。
在代码中表现为:关系对象出现在局域变量或者方法的参量里;或者关系类的静态方法被调用等。
注意:(1)关联关系、聚合关系和合成关系不能从java语法上表现出来。(2)关联关系常常可以进一步说明为聚合关系或者合成关系,因此上面关联关系和合成关系的实现是一样的。