是否有必要对组合物进行修改?

时间:2014-09-16 15:37:17

标签: java oop uml

我在寻找一种在Java中实现聚合和组合的方法时遇到了this。这是回答者对作文的实现 -

final class Car {

  private final Engine engine;

  Car(EngineSpecs specs) {
    engine = new Engine(specs);
  }

  void move() {
    engine.work();
  }
}

我想询问是否必须将引擎声明为私有最终才能使其成为有效的合成?组合还意味着引擎的属性在其生命周期中永远不会改变吗?

3 个答案:

答案 0 :(得分:3)

简答:

没有!

答案很长:

UML组合只是意味着复合实例的生命周期与其优越实例紧密耦合。因此,没有任何约束不允许交换或修改复合实例。


但是记住聚合和构图之间的区别!

汇总:

  • 主管 - >学生(如果主管辞去工作,无论如何,他们可以完成他的教育)
  • 公司 - >工作人员

<强>成分:

  • 建筑 - &gt;房间(如果建筑物被毁坏,房间也会被毁坏)
  • 公司 - &gt;系

答案 1 :(得分:2)

没有。例如,strategy pattern可能允许策略在运行时可交换,策略由另一个(上下文)类组成。

不可变性是一个很好的模式,但有些情况允许和/或要求你改变构图。例如,当汽车发动机爆炸时(如何?)

,您将如何更换汽车中的发动机?

答案 2 :(得分:1)

虽然不可变性是一个很好的设计目标,但并不要求将构图视为有效的&#39;。