设计模式之UML类图

UML简介

Unified Modeling Language (UML)又称统一建模语言或标准建模语言。

类:

从上到下分为三部分,分别是类名、属性和操作,其中类名是必须要有的。
类如果有属性,则每一个属性都必须有一个名字,另外还可以有其它的描述信息,如可见性、数据类型、缺省值等。
类如果有操作,则每一个操作也都有一个名字,其它可选的信息包括可见性、参数的名字、参数类型、参数缺省值和操作的返回值的类型等。

下面这个是Hero类的表示:
有一个private属性name,类型为String,一个public属性level,类型为int,一个protected属性blood,类型为float。
有一个public方法setName(String name),一个public方法getName(),一个抽象public方法abstractOperate().

设计模式之UML类图_第1张图片

接口:

接口有二种表示形式,一种是加interface关键字的类,一种是圆圈。
下面表示一个接口Shape,方法为public的draw():

设计模式之UML类图_第2张图片

类图关系

1.实现
指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;

空心三角+虚线:

此例子表示为ShapeA和ShapeB实现接口Shape:

设计模式之UML类图_第3张图片

2.泛化(继承)
指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性

空心三角+实线:

此例子表示为子类son继承父类father:
设计模式之UML类图_第4张图片

3.关联
他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量,换句话说就是成员变量的代码体现。

普通箭头+实线:

此例子表示为A类关联B类,也就是A类有一个成员变量为B类的引用:
设计模式之UML类图_第5张图片

4.聚合
聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;

普通◇+实线+普通箭头:

此例子表示为汽车类由轮胎和发动机组成,也就是汽车类由轮胎和发动机聚合而成:
设计模式之UML类图_第6张图片

5.组合
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;

实心◇+实线+普通箭头:

此例子表示为人是由大脑和四肢组成:
设计模式之UML类图_第7张图片

6.依赖
可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;
表现在代码层面,为类B作为参数被类A在某个method方法中使用,局部变量,方法的参数,静态方法的调用;

虚线+普通箭头:

此例子表示为A类依赖B类,B类的一个对象在A类的方法operate中作为参数调用:
设计模式之UML类图_第8张图片

各种关系强弱顺序:
泛化=实现>组合>聚合>关联>依赖

参考:
1.UML总结4—UML九种图关系说明
http://blog.csdn.net/chenyujing1234/article/details/8173519

你可能感兴趣的:(设计模式之样例篇,设计模式之android)