zoukankan      html  css  js  c++  java
  • 【Java】聚合和组合的区别

    组合:部分与整体是与生俱来的,部分的存在依赖于整体。比如人与人的某个器官,人一出生,器官就在,人死亡,器官也就没了意义。

    实心菱形=>组合
    关系相对紧密
    A类的生命期受B类的控制
    开辟新空间

    聚合:你与你的电脑(或者其它物品),电脑是属于你的吧,但是你是一出生就拥有了电脑吗,电脑是某个厂商生产出来的,然后你买过来才成为了你的一部分。你死了以后,电脑也可以送给别人继续用啊!这就不叫做其存亡了,所以这是聚合。

    空心菱形=>聚合
    关系相对松散
    聚合类B不需要对被聚合类A负责
    没有新开辟空间

    聚合类B的对象在创建时不会立即创建被聚合类A的对象
    而是等待一个外界的对象传给它,传给它的这个对象不是B类创建的

    这个是结合我之前看过的设计模式所想到的,如果你了解过设计模式,则会更容易明白我说的是什么了,比如有一种设计模式叫做责任链模式,责任链中的处理者往往是先创建出来,然后再把引用传到另一个责任处理对象作为责任接班人,这就用到了聚合的思想吧。

    另外,《thinking in Java》里面是这样说的,“composing a new class from existing classes, this concept is called composition (if the composition happens dynamically, it's usually called aggregation)”。

    意思是通过现在的类组合成一个新的类,叫做组合,如果这种组合是动态的,则叫聚合。如何理解”动态“,也就是可以随时加进来也可以随时删除,拿上面的人与电脑的例子来说,电脑可以随时扔掉,也可以随时加进来,人的生命不会受到威胁,但是人如果少了某个器官,则会危及到生命了!其实现实中的例子与Java中的概念还是有一点出入,类比只能是接近真相。



    组合和聚合是有很大区别的,这个区别不是在形式上,而是在本质上: 比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象),这种情况叫做组合,反之b所指向的对象还会有另外的引用指向它,这种情况叫聚合。 在实际写代码时组合方式一般会这样写: A类的构造方法里创建B类的对象,也就是说,当A类的一个对象产生时,B类的对象随之产生,当A类的这个对象消亡时,它所包含的B类的对象也随之消亡。 聚合方式则是这样: A类的对象在创建时不会立即创建B类的对象,而是等待一个外界的对象传给它 传给它的这个对象不是A类创建的。 现实生活中: 人和手,脚是组合关系,因为当人死亡后人的手也就不复存在了。人和他的电脑是聚合关系。
    复制代码
     1 class Hand{ 
     2 } 
     3 class Computer{ 
     4 } 
     5 //组合: 
     6 class Person{ 
     7   private Hand hand; 
     8   public Person(){ 
     9   hand = new Hand();
    10  } 
    11 } 
    12 //聚合: 
    13 class Person{ 
    14   private Computer computer; 
    15   public setComputer(){ 
    16   computer = new Computer(); 
    17  } 
    18 }
    复制代码
    转自:https://www.cnblogs.com/TaoLeonis/p/7126340.html
  • 相关阅读:
    csu 1503: 点弧之间的距离-湖南省第十届大学生计算机程序设计大赛
    Android MediaPlayer 和 NativePlayer 播放格式控制
    国内互联网企业奇妙招数
    [Oracle] Insert All神奇
    代码杂记
    R.layout.main connot be resolved 和R.java消失
    计算机安全篇(1)
    深入浅出谈开窗函数(一)
    PHP JSON_ENCODE 不转义中文汉字的方法
    c#indexof使用方法
  • 原文地址:https://www.cnblogs.com/it-deepinmind/p/13223348.html
Copyright © 2011-2022 走看看