本文主要是介绍设计模式 - 学习笔记 - UML统一建模语言,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
设计模式 - 学习笔记 - UML统一建模语言
- 类图
- 关系类型
- 1. 泛化 Generalization
- 2. 实现 Realization
- 3. 组合 Combination
- 4. 聚合 Aggregate
- 5. 关联 Association
- 6. 依赖关系 Dependency
- 以上六种关系的耦合度。强==>弱
- 横向
- 参考资料
由于是学习设计模式的准备工作,这里只是学习了一下UML中的类图、关系
类图
| 属性 | 说明 | 类型非必填 |
|---|---|---|
+公共属性: String | +号表示public | String |
-私有属性: String | -号表示private | String |
#保护属性: String | #号表示protected | String |
~默认属性: String | ~号表示default可省略 | String |
+静态属性: String | 下划线表示静态,同样适用于类名 | String |
| 方法 | 说明 | 参数类型 | 返回类型非必填 |
|---|---|---|---|
+公共方法(String): int | +号表示public | String | int |
-私有方法(String): int | -号表示private | String | int |
#保护方法(String): int | #号表示protected | String | int |
抽象方法(String): int | 斜体号表示抽象,同样适用于类名 | String | int |
关系类型
classDiagramclassA --|> classB : 继承classC --* classD : classC_1...classC_n 组合为 classD classE --o classF : classE_1...classE_n 聚合为 classF classG --> classH : 单向关联classI <--> classJ : 双向关联 (原文中是无箭头的实线)classK ..> classL : 依赖classM ..|> classN : 接口实现classO .. classP : 关联(虚线)难道是弱关联?没见过
1. 泛化 Generalization
- 表示从子类到父类,越来越概括的关系(另一个角度从父到子越来越具象)。就理解为继承就好了。
- 图例说明:
实线+三角箭头。(三角箭头空心实心没区别) - 箭头指向:从
子类指向父类。
2. 实现 Realization
- 类实现接口,具体类实现抽象类。
- 图例说明:
虚线+三角箭头。(三角箭头空心实心没区别) - 箭头指向:从
实现类指向接口。
3. 组合 Combination
- 表示整体与部分的关系。紧耦合,部分与整体结合后具有相同的生命周期。类似人体与四肢。
- 图例说明:
实线+实心菱形箭头。 - 箭头指向:从
部分指向整体。 - 也有的地方叫
复合,比如在 Visio 2016
4. 聚合 Aggregate
- 表示整体与部分的关系。松散结合类似变形金刚。
- 图例说明:[
普通箭头]+实线+空心菱形箭头。(指向部分的普通箭头可省略) - 箭头指向:从
部分指向整体。
5. 关联 Association
-
表示一种拥有关系,具有方向性。如果A单向访问B则为
单向关联。AB互相访问则为双向关联。 -
图例说明:
实线+普通箭头。(双向可省略箭头) -
箭头指向:从
引用方指向被引用方。 -
与依赖的区别:关联关系需要持久化。依赖只是临时调用。
6. 依赖关系 Dependency
- 自己
临时需要借助对方的能力来完成自己的工作。 - 图例说明:
虚线+普通箭头。 - 箭头指向:从
自己指向对方(被依赖的目标)。
网上很多举例:人啊、水啊、空气啊。。。问题我不是不懂依赖这两个汉字啊。我想知道的是它在编码要干啥?
ClassA依赖ClassB表示如下:
A的方法参数用到BA的属性用到BA调用了B静态方法or属性
直观的说就是ClassA 、ClassB 的代码写好后,你删了ClassB那么ClassA会报错。
常见的场景:我们的服务层需要注入工具类来完成工作。
以上六种关系的耦合度。强==>弱
从强到弱:泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

横向
参考资料
UML建模之类图(Class Diagram,UML图)
使用Mermaid语法画UML类图
这篇关于设计模式 - 学习笔记 - UML统一建模语言的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!