【设计模式】UML关系图示例

来源:互联网 发布:2017网络棋牌赌博案 编辑:程序博客网 时间:2024/05/22 01:41

UML图例如下:

image

一、类框表示

image

  • 第1层:类名。
  • 第2层:属性(即类的字段)。
  • 第3层:操作(类的方法)。+号表示public;-号表示private;#号表示protected。

二、类之间的各种关系

类之间的关系共6种:

  1. 继承关系
  2. 接口关系
  3. 依赖关系
  4. 关联关系
  5. 聚合关系
  6. 组合关系

1、继承关系

用空心三角形+实线表示。

image 

image

2、实现接口

用空心三角形+虚线表示。

image

image

3、依赖关系

用虚线箭头表示。

image

主类(动物)中的某个方法需要用到某类(氧气、水)作为参数,就是说“主类的某些方法需要依赖到某类”。

image

4、关联关系

用实线箭头表示。

image

主类(企鹅)中的某个属性变量(字段)是某类(气候)的一个引用(或者指针),就是说:“主类和某类具有关联性,主类中的某些方法需要用到某类的外部实例,但是某类的外部实例的生命周期和主类没有关系”。

image

5、聚合关系

用空心菱形+实线箭头表示。

image

这是一种弱的“拥有”关系。主类是有若干个某类对象实例,并提供了有关某类的对外一致的接口方法。但是某类又不知道主类的存在,并不为主类提供功能性服务。例如:std::vector,vector和T就是集合关系。

image

6、合成关系(组合关系)

用实心菱形+实线箭头表示。

image

这是一种强的“拥有”关系。主类必须拥有一个某类。某类为主类提供必不可少的功能。某类的生存期和主类一致。例如:NetServer类中必须拥有Socket类用来进行网络通信,同样也必须拥有DataSoruce类用来存储数据。

image

三、关系间的区别

1、聚合和组合关系的区别

  • 聚合关系多用于:容器类+元素类,组合关系多用于:一个综合大类+若干个专用小类。
  • 聚合关系中,主类可以有0个或者N个相同类型某类,并且可以运行时动态增删。组合关系中,主类一般拥有N个不同类型的某类,和主类同时创建或删除。
  • 聚合关系中,某类仅仅是缓存在主类中,并不为主类提供某些功能。组合关系中,某类提供主类必需的功能。

2、关联关系和聚合及组合关系的区别

  • 关联关系:主类仅仅用到某类的部分方法。某类可以为全局变量,主类的成员变量指针指向这个全局变量。例如:Allocator类,主类可用全局的Allocator来创建一个子实例。
  • 如果某类的生命周期不受主类控制,又为主类提供了某些功能,但主类又不是容器,那么某类就是和主类相关联。