0

如果我有以下课程,Foo,其中Bar也是一个课程:

public class Foo {
    private Bar baz;

    public Foo() {
    }
}  

我是否正确地认为,如果我baz在声明它的地方进行初始化,我将在和之间建立聚合关系FooBar并且如果我bazFoo的构造函数中进行初始化,我将拥有复合关系?像这样:

聚合(我认为这可能不正确?):

public class Foo {
    private Bar baz = new Bar();

    public Foo() {
    }
}  

合成的:

public class Foo {
    public Foo() {
        baz = new Bar();
    }
}  

我对 Java 有点陌生,并且看到一切都是一个类,我很难想象(特别是)聚合关系是如何工作的,除非我将baz static. 如果我baz在其他地方创建并将其传递给 的构造函数Foo,那么不baz只是其他类的组合吗?有点迷茫。

4

2 回答 2

1

尝试阅读有关依赖注入的更多信息。这是你在最后一句话中描述的。在您的两个示例中,它都是一种删除硬编码依赖项的模式,但这项工作被委派给更高级别的权限。

你会得到类似的东西:

public class Foo {

    private Bar baz;

    public Foo(Bar baz) {
        this.baz= baz;
    }
}

baz 的实际实例可以在编译和运行时更改。

实际的组成意味着没有类 Foo 的 Bar 类没有意义(或价值),没有 Foo 就不能存在,- Bar“是”Foo 的一部分。例如:IMEI 号码是手机的一部分。

聚合告诉 Foo 只拥有 Bar,- Bar “拥有” Foo 。一个例子是:电池是手机的一部分。其他不是电话的设备也可以有电池。

这两个概念与您的编码方式没有太大关系。

于 2013-06-12T10:08:30.517 回答
0

作品

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();  
  }  
}  
于 2013-06-12T10:06:39.340 回答