在关联和聚合中,一个类维护对另一个类的引用。
那么,构造函数注入是否意味着组合?按照相同的逻辑,是否可以肯定地说 setter 注入导致关联,而不是聚合?
在关联和聚合中,一个类维护对另一个类的引用。
那么,构造函数注入是否意味着组合?按照相同的逻辑,是否可以肯定地说 setter 注入导致关联,而不是聚合?
聚合只是关联的另一种表示。所以 setter 注入会导致关联和聚合——就像构造函数注入一样。
关于构造函数注入是否意味着组合是有争议的,因为根据对组合的严格解释,类本身必须负责组合类的构造和销毁。
在 java 代码级别,如果您有 2 类和 3 类,这是预期的代码。
传统关联 0..1 到 0..1给出以下代码:
public class Class2 {
private Class3 class3;
public Class3 getClass3() {
return class3;
}
public void setClass3(Class3 class3) {
this.class3 = class3;
}
}
第 3 类代码与第 2 类代码相同。
请注意,关联与属性相关,而不是与方法相关,因此如果我们决定不使用访问器,那么代码只会是:
public class **Class2** {
private Class3 class3;
从1 到多的聚合给出以下代码:
import java.util.Collection;
import java.util.Iterator;
public class Class2 {
private Collection<Class3> class3 = null;
public Collection<Class3> getClass3() {
return class3;
}
public Iterator<Class3> class3Iterator() {
return class3.iterator();
}
public boolean isClass3Empty() {
return class3.isEmpty();
}
public boolean containsClass3(Class3 class3) {
return this.class3.contains(class3);
}
public boolean containsAllClass3(Collection<Class3> class3) {
return this.class3.containsAll(class3);
}
public int class3Size() {
return class3.size();
}
public Class3[] class3ToArray() {
return class3.toArray(new Class3[class3.size()]);
}
public void setClass3(Collection<Class3> class3) {
this.class3 = class3;
}
public boolean addClass3(Class3 class3) {
return this.class3.add(class3);
}
public boolean removeClass3(Class3 class3) {
return this.class3.remove(class3);
}
public void clearClass3() {
this.class3.clear();
}
}
public class Class3 {
private Class2 class2 = null;
public Class2 getClass2() {
return class2;
}
public void setClass2(Class2 class2) {
this.class2 = class2;
}
}
希望这可以帮助