银行与账户是组合还是聚合呢?

来源:15-2 桥接模式coding

慕码人1018289

2020-03-11

老师您好,您说银行和账户,或者说桥接模式是一种组合模式,IDEA给出的UML类图也是显示组合模式。可是银行和账户的生命周期可以不一样啊,因为账户是通过银行的构造方法传入的,那么完全可以写出这样的代码:
Account account = new SavingAcount();
Bank bank = new ICBCBank(account);
bank = null;
此时account并不会因为bank为空而自己为空。我理解,只要成员变量是可以通过外部设置的,无论是构造方法还是set方法,都会造成上面的局面,除非使用弱引用,达成生命周期一致。而生命周期是否一致,是我看了您前面的课程后,区分组合和聚合的主要区别,比如鸟和翅膀是组合,鸟没有了翅膀也没有了,比如链表或树结构里面往往有个Node对象,他们是生命周期一致的,也是典型的组合关系,我们从链表或树的外部,无法赋值Node,也就无法劫持引用。那银行和账户到底是组合还是聚合呢。。。

写回答

1回答

geelylucky

2020-03-12

同学,最显著的区别就是聚合是可以分离后独立存在的,组合是分离后即消亡。假如你这个Account是一个内部类,那就是组合关系,假如外面可以单独创造使用,那就是聚合关系。

0
1
慕码人1018289
非常感谢!
2020-03-23
共1条回复

Java设计模式精讲-Debug方式+内存分析

系统学习设计原则,设计模式,锤炼编码内功,赢取高薪Offer

3430 学习 · 407 问题

查看课程