总结Java类关系

什么是关系?

关系是指事物之间存在单向或双向的作用或者影响的状态。其中类与类之间要么有关系要么没关系,感觉这句话有点说的很无耻,谁都知道,但是其中奥妙在于很难确定类与类之间是否有关系。证明两个或者多个类是否存在关系涉及到业务、架构、模块边界的问题,然而由于业务模型的抽象角度不同而不同,确定他们是否有关系是一件很不简单的事情。

Java类有关系的6种情况

  1. 继承:extends【is-a】
  2. 实现:implements【can do】
  3. 组合:类是成员变量【contain-a】
  4. 聚合:类是成员变量【is-a】
  5. 依赖:是除了组合与聚合外的单向弱关系。比如使用一个类的属性、方法,或以其作为方法的参数传入,或以其作为方法的返回值输出 【depends-a】
  6. 关联:相互是平等关系的依赖【links-a】

以上六种关系中继承和实现是很容易辨别的关系。但是在设计过程中要注意组合、聚合、依赖和关联这四个的区别。

继承:

继承关系包括子类和父类、子接口和父接口之间两种继承关系。用空心三角形和实线表示这种继承关系。

实现:

类和接口之间的关系,用空心三角形和虚线表示。

依赖:

A类会用到B类,这种关系具有偶然性,临时性。但B类的变化会影响A类。这种在代码中的体现为:A类方法中的参数包含了B类。 由虚线和箭头表示

关联:

A类会用到B类,这是一种强依赖关系,是长期的并非偶然。在代码中的表现为:A类的成员变量中含有B类。

由实线和箭头表示。

聚合:

关联关系的一种特例,是整体和部分的关系,即has-a的关系。整体和部分之间是可分离的,拥有各自的生命周期。 和组合关系的整体和部分关系不同的是:该整体包含很多个部分,但这里的部分都是相同的。比如鸟群和鸟的关系是聚合关系,鸟群中每个部分都是鸟。由空心菱形和实线箭头表示。

组合关系:

也是关联关系的一种特例,它体现一种contains-a的关系,这种关系比聚合更强,也称为强聚合。它同样体现整体与部分的关系,但这种整体和部分是不可分割的,他们具有相同的生命周期。 和聚合关系相比:这种部分和整体的关系表现为,整体包含该部分,但也包含其他部分,其他部分和该部分并不相同。比如cpu和计算机是组合关系,计算机包含cpu,但又不仅仅是cpu还有屏幕键盘等。其他的部分不和cpu是同样的。 由实心菱形和实线箭头表示。

本文分享自微信公众号 - Java后端技术栈(t-j20120622),作者:lawt

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【刨根问底】java静态

    由于今天一个小伙伴问静态static修饰的方法怎么使用,于是联想到,如果你还不会使用或者只是停留在使用层面,那么这里告诉你,静态可没你想的那么简单,比如下面的这...

    用户4143945
  • 学完这100多技术,能当架构师么?(非广告)

    本篇内容涵盖14个方面,涉及上百个框架和工具。会有你喜欢的,大概也会有你所讨厌的家伙。这是我平常工作中打交道最多的工具,大小公司都适用。如果你有更好的,欢迎留言...

    用户4143945
  • 大数据的搜索引擎——ElasticSearch

    结果显示分片大都是因为 node_left 导致未分配,然后通过 explain API 查看分片 myindex[3] 不自动分配的具体原因:

    用户4143945
  • OO:UML类图、六大关系

    WEBJ2EE
  • CodeMirror 实现 JavaScript、 MySql 关键字的变色和自动实时提示 autocomplete

    https://codemirror.net/doc/manual.html#config

    一个会写诗的程序员
  • 使用bootstrap的栅栏实现五列布局

    我们知道,在使用Bootstrap栅格的时候,我们可以对网页方便的进行模块分割。Bootstrap 包含了一个响应式的、移动设备优先的、不固定的网格系统,可以随...

    祈澈菇凉
  • CSS画图

    参考资料:https://www.cnblogs.com/wangjiachen666/p/9462837.html

    CherishTheYouth
  • 干货 | 减小步进电机发热的方法

    步进电机作为一种数字式执行元件,在运动控制系统中得到广泛的应用。许多用户朋友在使用步进电机的时候,感觉电机工作时有较大的发热,心存疑虑,不知这种现象是否正常。实...

    机器人网
  • 什么是万倍的软件工程师

    之前网上看到过一些对10倍或者100倍工程师的讨论文章,到底这种工程师存在吗?到底是用什么的标准来衡量这种工程师呢?在软件和互联网行业做了20多年,本文就谈谈本...

    用户5829239
  • jquery 操作css 尺寸

    .height()   获取元素集合中的第一个元素的当前计算高度值,或设置每一个匹配元素的高度值。   .height()     获取匹配元素集...

    用户1197315

扫码关注云+社区

领取腾讯云代金券