当前位置: 首页 > news >正文

工程画图-UML类图 组合和聚合

组合VS聚合

组合&聚合浅层理解

组合似组装,电脑组装,少装一个CPU行不?不行,没CPU哪还是电脑啊。用实心菱形表示。

而聚合似起义,聚是一团火,散是满天星。就像公司和员工,少你一个照常运转。

所以组合比聚合绑的更深。

组合&聚合代码级理解

现实中很好想象组合和聚合,离了谁不行,那就是组合, 离了谁照常运转那就聚合。组合是强关系,聚合是弱关系。

但是!在代码里呢?怎么表示呢?反正我总是在这方面混淆。这次务必是要记得彻底的。我们分析下哈。

请看下列代码。

class A {
  private B mB;
}

class B {

}

你怎么知道A和B它是聚合关系还是组合关系呢?

So,我们要引入组合和聚合关系的另外一个重大特点:生命周期

组合:在编程中,如果 B对象的生命周期依赖于A对象,当A的生命周期结束的时候,B必不能独立存活。当这种关系存在的时候,那就是组合关系。正如电脑和CPU, 在电脑看来,离不开CPU,其实在CPU看来,组不到主板上去,那自己的存在也没有什么价值。

聚合:如果A对象需要B对象的存在,离开了B对象也能运转,并且B对象即使离开了A对象,人家的声明周期依然正常,可以被别的对象继续使用。那就是聚合。

所以对于以下代码是组合!

class A {
  private B mB;
  public void A {
    this.mB = new B();
  }

  public boolean onDestory(){
    this.mb = null;
  }
}

class B {
  
}

对于以下代码聚合!

class A {
  private B mB;
}

class B {
  
}

如下图所示:

http://www.dtcms.com/a/111041.html

相关文章:

  • SDK中窗口调用
  • 什么是Stop The World
  • Apifox app的用法作用
  • Linux开发工具——apt
  • 从0到神谕:GPT系列的进化狂想曲——用AI之眼见证人类语言的终极形态
  • ffmpeg常见命令3
  • 【力扣hot100题】(054)全排列
  • 【USRP】srsRAN 开源 4G 软件无线电套件
  • Cribl 移除Fields
  • 应对高并发的根本挑战:思维转变【大模型总结】
  • 24信号和槽_自定义槽函数(1)
  • 优选算法的妙思之流:分治——快排专题
  • C++内存管理
  • Windows强制删除任何你想删除的文件和文件夹
  • TypeConverter
  • Linux常用基础命令应用
  • 【问题处理】webpack4升webpack5,报错Uncaught ReferrnceError: process is not defined
  • orangepi zero烧录及SSH联网
  • 打造下一代智能体验:交互型 AI 的崛起与实践
  • 【小沐杂货铺】基于Three.JS绘制太阳系Solar System(GIS 、three.js、WebGL、vue、react)
  • 【Kafka基础】Docker Compose快速部署Kafka单机环境
  • 618SJBH宾馆信息管理系统的设计与实现
  • 积分赛——读取实时时间
  • java 代码错误分析
  • 上电电压跌落处理方法
  • Derivatives and Differentiation (导数和微分)
  • 【虚拟仪器技术】西南大学虚拟仪器复习试题,labview虚拟仪器试卷
  • 冷门预警,德甲006:奥格斯堡VS拜仁,奥格斯堡防线稳健
  • 【数据结构】_队列
  • Elasticsearch:使用机器学习生成筛选器和分类标签