我在寻找一种在Java中实现聚合和组合的方法时遇到了this。这是回答者对作文的实现 -
final class Car {
private final Engine engine;
Car(EngineSpecs specs) {
engine = new Engine(specs);
}
void move() {
engine.work();
}
}
我想询问是否必须将引擎声明为私有最终才能使其成为有效的合成?组合还意味着引擎的属性在其生命周期中永远不会改变吗?
答案 0 :(得分:3)
简答:
没有!
答案很长:
UML组合只是意味着复合实例的生命周期与其优越实例紧密耦合。因此,没有任何约束不允许交换或修改复合实例。
但是记住聚合和构图之间的区别!
汇总:
<强>成分:强>
答案 1 :(得分:2)
没有。例如,strategy pattern可能允许策略在运行时可交换,策略由另一个(上下文)类组成。
不可变性是一个很好的模式,但有些情况允许和/或要求你改变构图。例如,当汽车发动机爆炸时(如何?)
,您将如何更换汽车中的发动机?答案 2 :(得分:1)
虽然不可变性是一个很好的设计目标,但并不要求将构图视为有效的&#39;。