Java中组合与聚合的区别

今日得闲,拿来一直放着的《Thinking in Java》来看,前面就说到组合跟聚合,之前看过现在也忘了,上网查了一下,大家说的都有道理。李笑来老师说过,一个好的类比对于正确的理解和实践某个事物是非常重要的。

所以,我不是给大家讲一个新的概念,而是给大家一个我认为比较好理解的类比,以此来说明什么是组合与聚合。


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


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


这个是结合我之前看过的设计模式所想到的,如果你了解过设计模式,则会更容易明白我说的是什么了,比如有一种设计模式叫做责任链模式,责任链中的处理者往往是先创建出来,然后再把引用传到另一个责任处理对象作为责任接班人,这就用到了聚合的思想吧。好吧,如果不知道我在说什么,可以去找找相关的资料看看,或者忽视掉就好,以后碰到再说吧。只要上面的例子有助于大家理解组合与聚合这两个概念就行。


另外,《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中的概念还是有一点出入,类比只能是接近真相,而不能代替真相啊,所以大家不要钻牛角尖,理解为上!

你可能感兴趣的:(java)