関連付けと集約の両方で、1 つのクラスが別のクラスへの参照を維持します。
それでは、コンストラクターの注入は合成を意味しますか? 同じ論理で言えば、setter インジェクションはアグリゲーションではなくアソシエーションにつながると言っても過言ではありませんか?
関連付けと集約の両方で、1 つのクラスが別のクラスへの参照を維持します。
それでは、コンストラクターの注入は合成を意味しますか? 同じ論理で言えば、setter インジェクションはアグリゲーションではなくアソシエーションにつながると言っても過言ではありませんか?
集約は、関連付けの単なる別の表現です。そのため、セッター注入は、コンストラクター注入と同様に、関連付けと集約につながります。
構成の厳密な解釈によれば、クラス自体が複合クラスの構築と破棄の両方を担当する必要があるため、コンストラクター注入が構成を意味するかどうかについては議論の余地があります。
クラス2とクラス3がある場合、Javaコードレベルでは、これが予想されるコードです。
従来の関連付け 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;
}
}
お役に立てれば