依赖关系和组成之间的区别?

2022-09-01 16:38:50

从这里获取的定义

屬地

一个类的结构或行为的变化会影响另一个相关类,然后这两个类之间存在依赖关系。反之亦然。当一个类包含另一个类时,就会发生这种情况。

组成

组合是聚合的一个特例。以更具体的方式,受限制的聚合称为组合。当一个对象包含另一个对象时,如果包含的对象在没有容器对象存在的情况下就不能存在,那么它被称为组合。

Java中的具体示例从这里和这里

屬地

class Employee {
    private Address address;

    // constructor 
    public Employee( Address newAddress ) {
        this.address = newAddress;
    }

    public Address getAddress() {
    return this.address;
    }
    public void setAddress( Address newAddress ) {
        this.address = newAddress;
    }
}

组成

final class Car {

  private final Engine engine;

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

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

答案 1

在两个构造函数中可以看到差异:

  • 依赖关系:对象来自外部,它被分配到其他地方。这意味着 和 对象单独存在,并且仅相互依赖AddressAddressEmployee

  • 构图:在这里,您可以看到在 内部创建了一个新的 。该对象是 的一部分。这意味着 a .EngineCarEngineCarCarEngine


答案 2

简单地说:

谢谢你这个...Marko Topolnik

  1. Dependency当一个对象“依赖于”另一个对象时发生。它可以在有或没有2个对象之间的关系下发生。实际上,一个对象甚至可能不知道另一个对象存在,但它们可能是依赖的。示例:生产者-消费者问题。生产者不需要知道消费者的存在,但它必须做wait()和通知()。所以,“NO”,依赖性不是关联的子集。

  2. Composition:是一种关联类型,其中“子”对象在没有父类的情况下无法存在,即,如果子对象存在,则它必须位于父对象中,而不是其他任何地方。

    EG:汽车(父母)有燃油喷射系统(儿童)。现在,在汽车外面安装燃油喷射系统是没有意义的(这将毫无用处)。即,没有汽车,燃油喷射系统就不可能存在。

  3. Aggregation:此处,子对象可以存在于父对象之外。汽车有司机。驾驶员可以存在于车外。