如果我有以下课程Foo
,其中Bar
也是一个班级:
public class Foo {
private Bar baz;
public Foo() {
}
}
我是否正确地认为,如果我初始化baz
声明它的地方我会在Foo
和Bar
之间建立一个总体关系,如果我在baz
中初始化Foo
{1}}的构造函数我将有一个复合关系?像这样:
聚合(我认为这可能不正确?):
public class Foo {
private Bar baz = new Bar();
public Foo() {
}
}
组合:
public class Foo {
public Foo() {
baz = new Bar();
}
}
我对Java有点新鲜,并且看到一切都是一个类,我很难想象(特别是)聚合关系如何工作,除非我做baz
static
。如果我在其他地方创建baz
并将其传递给Foo
的构造函数,那么baz
是否只是其他类的复合?有点困惑。
答案 0 :(得分:1)
尝试详细了解dependency injection。这是你在最后一句话中描述的内容。它是一种模式,可以删除两个示例中的硬编码依赖项,但此作业将委派给更高级别的权限。
你会得到类似的东西:
public class Foo {
private Bar baz;
public Foo(Bar baz) {
this.baz= baz;
}
}
可以在编译和运行时更改baz的实际实例。
实际的组合意味着没有Foo类,Bar类没有任何意义(或值),没有Foo它就不存在, - Bar“是Foo的一部分。一个例子是:IMEI号码是电话的一部分。
聚合告诉Foo只拥有Bar, - Bar“拥有”Foo。一个例子是:电池是手机的一部分。其他不是手机的设备也可能有电池。
这两个概念与编码方式没有太大关系。
答案 1 :(得分: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();
}
}