1. ホーム
  2. java

[解決済み] JavaにおけるAggregationとCompositionの実装の違いについて

2022-10-17 16:06:25

質問

AggregationとCompositionの概念的な違いは知っています。どなたか、Javaにおけるこれらの実装の違いを例とともに教えていただけませんか。

どのように解決するのですか?

構成

final class Car {

  private final Engine engine;

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

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

集計方法

final class Car {

  private Engine engine;

  void setEngine(Engine engine) {
    this.engine = engine;
  }

  void move() {
    if (engine != null)
      engine.work();
  }
}

コンポジションの場合、EngineはCarによって完全にカプセル化されます。外部がエンジンへの参照を取得する方法はありません。EngineはCarとともに生き、Carとともに死にます。アグリゲーションでは、CarもEngineを通じて機能を実行しますが、Engineは常にCarの内部部品とは限りません。エンジンは交換されるかもしれないし、完全に取り外されるかもしれない。それだけでなく、外の世界はまだエンジンへの参照を持つことができ、それが車の中にあるかどうかに関係なくそれをいじることができます。