前言

最近在学习程杰老师的《大话设计模式》,觉得非常不错,就做了一些学习笔记和总结。如果对设计模式很感兴趣的,可以直接阅读书籍,相信会有更多的收获。

本人小菜一枚,如果理解的不对的还请多多指教。

UML类图说明

继承关系

如鸟类要继承动物类时,用空心三角形+实线指向动物类,如下

实现接口

和普通类比,接口类第一层有个<< interface >>标识。当某个类要实现接口时,用空心三角形+虚线指向接口类,如下

关联关系

当一个类“知道”另一个类时,就可以用关联。关联关系用实线箭头表示。如下,企鹅知道天气的变化,则可以用实线箭头指向天气类。在代码中的具体表现为,企鹅类中会有个天气对象的成员属性,该天气类可以在构造函数里实例化。

依赖关系

依赖关系表示一个类需要引用另一个类的对象。和关联关系不同的是,在关联关系中被应用的对象以类的成员属性形式被引用,而依赖关系中被引用的对象通常是在类方法中以局部变量的形式引用。该局部变量可以是类方法的参数,也可以是在类方法中获得的一个实例。比如动物需要新陈代谢,而新陈代谢依赖与水和氧气。在代码中体现为,新陈代谢这个方法需要用到水和氧气这两个对象,但其它类方法不一定需要用到。

聚合关系

聚合关系表示一种弱的“拥有”关系。如A对象可以包含有B对象,但B对象不是A对象的一部分。如雁群和大雁就是一种聚合关系。聚合关系用空心菱形+实线箭头表示。在代码里,雁群会有一个数组,存放大雁对象。具体如下

组合关系(合成关系)

组合关系(也称合成关系)表示一种强的“拥有”关系,强调了部分和整体的关系。注意,部分和整体的生命周期是一样的。如鸟和翅膀就是一个组合关系。组合关系用实心菱形+实线箭头表示。在代码中,为了保证部分和整体的生命周期是一致的,所以在整体类的构造函数中必须初始化部分类实例。具体如下

总结

关联关系和依赖关系,组合关系和聚合关系这几个通常会比较难理清楚。可以通过以下几点来区分

  • 关联关系,聚合关系和组合关系都是通过类的成员属性来引用类对象,这三种关系在代码实现上基本相同,只是从业务场景上作区分。
  • 依赖关系是通过类方法的局部变量来引用类对象的,所以可以根据这点来判断是否是依赖关系。
  • 依赖关系和聚合关系可以看做是一种“弱”关系,所以在画图时都是用虚线和空心菱形。而关联关系和组合关系是一种“强”关系,所以连线时用实线和实心菱形。可以这么理解强弱关系,如相对类成员属性,局部变量影响更小,所以更弱些。

最新文章

  1. 一张图看懂normal,static,sealed,abstract 的 区别
  2. openstack想说爱你不容易
  3. 《InsideUE4》-7-GamePlay架构(六)PlayerController和AIController
  4. Labview调用Python脚本
  5. python-flask 框架使用 flask_mongoengine
  6. Hello world S.B.S.
  7. Asp.Net验证码1
  8. 【转】Eclipse上安装GIT插件EGit及使用
  9. CentOS 7 安装Broadcom无线网卡驱动
  10. sed运用
  11. 走近webpack(4)--css相关拓展
  12. python3解决 json.dumps中文乱码
  13. Linux:固定 ip
  14. git 代码分支合并merge提交新修改远程以及本地分支
  15. Nginx 反向代理(http转htpps,并支持80端口继续提交post请求)
  16. Kafka跨网络访问设置
  17. iOS:风火轮活动刷新视图控件UIActivityIndicatorView的详细使用
  18. JAVA数据类型中的char类型
  19. sql 触发器 游标
  20. easyui 扩展 之 Tree的simpleData加载

热门文章

  1. Electron开发使用Vue Devtools
  2. toJSON() 方法,将 Date 对象转换为字符串,并格式化为 JSON 数据格式。
  3. 11.Linux date命令的用法
  4. JavaScript的几种循环使用方式及性能解析
  5. Python稀疏矩阵运算
  6. Burp suite抓取HTTPS请求
  7. 20道JS原理题助你面试一臂之力!(转)
  8. SQL server 从创建数据库到查询数据的简单操作
  9. 配置kubernetes.client的参数遇到的坑
  10. springboot+mybatis+SpringSecurity 实现用户角色数据库管理(一)