组合和聚合的区别

来源:互联网 发布:java上传文件的方式 编辑:程序博客网 时间:2024/04/29 13:11
1、组合和聚合的区别

组合,叫compose。在代码层面上用内部类实现,如果A类由B类组合而成,则A和B有共同的生命周期。打比方的话就是人和大脑的关系,人由大脑组合而成,如果人死了,大脑也活不成。用UML表示,是一个实心的框框。

聚合,叫aggregate。在代码层面上用字段实现,如果A类包含B类型的字段,则A和B有各自的生命周期。打比方的话就是人和公司的关系,公司由人聚合而成。用UML表示,是一个空心的框框。

2、protected和package可见性

今天有个刚毕业的问我这个问题,说protected和package有什么区别。一时居然没反应过来。。。protected的字段和方法是子类可见,包内也可见;package仅包内可见。也就是protected > package

3、怎么实现全局唯一的字段?

不知道“全局唯一”的描述是否严谨。说到类的唯一实例,马上就会想到用单例模式。如果说有这么一个场景,一个类定义了一个字段initialized,用这个字段的值为true或者false来决定是否初始化,为了避免重复初始化,应该怎么做呢?其实就是今天看logback源代码的一点感想。有2种方法:

一种办法是把initialized声明为static字段,这样的话就算有多个类的实例,但这个字段却只会有一个。

另一种方法当然就是使用单例模式了,不需要细说了。让我奇怪的是,为什么logback里为了解决同一个问题,上述2种方法全用了呢?让我有点疑惑,难道是作者一时兴起?

4、怎么描述一系列状态

最近做一个任务模型的设计,有点头大。上网查了一些资料,好像“任务”这个东西没有一个标准的模型。不像权限模型有一个成熟的RBAC,直接拿来实现就可以了。

只好自己设计这个模型,在状态名称上有点纠结。一种风格是完成时,“已创建”、“已派发”、“已接受”…………,另一种风格是将来时,“待派发”、“待接受”、“待启动”…………

感觉前者更贴近任务本身的状态;不过后者更贴近使用者的角度,而且可以描述处理任务的下一个步骤。大家觉得哪种比较好呢?

这篇博客就不往论坛上贴了,不然肯定被投新手,说不定还会被投隐藏,妥妥的。。。
原创粉丝点击