Dependency injection 依赖注入和聚合/关联

Dependency injection 依赖注入和聚合/关联,dependency-injection,associations,aggregation,uml,Dependency Injection,Associations,Aggregation,Uml,在关联和聚合中,一个类维护对另一个类的引用 那么,构造函数注入意味着合成吗? 按照同样的逻辑,可以安全地说setter注入导致关联而不是聚合吗?聚合只是关联的另一种表示形式。所以setter注入导致了关联和聚合——构造函数注入也是如此 构造器注入是否意味着组合是有争议的,因为根据对组合的严格解释,类本身必须对复合类的构造和破坏负责 在java代码级别,如果您有类2和类3,那么这就是预期的代码 传统关联0..1到0..1给出以下代码: public class Class2 { priv

在关联和聚合中,一个类维护对另一个类的引用

那么,构造函数注入意味着合成吗?
按照同样的逻辑,可以安全地说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;
    }
}
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;
    }
}
类别3与类别2的代码相同

请注意,关联与属性相关,而与方法无关,因此,如果我们决定不使用访问器,则代码仅为:

public class **Class2** {

    private Class3 class3;
聚合1到多给出以下代码:

public class Class2 {

    private Class3 class3;

    public Class3 getClass3() {
        return class3;
    }

    public void setClass3(Class3 class3) {
        this.class3 = class3;
    }
}
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;
    }
}
import java.util.Collection;
导入java.util.Iterator;
公共课2{
私有集合class3=null;
公共集合getClass3(){
返回类3;
}
公共迭代器class3Iterator(){
返回class3.iterator();
}
公共布尔值isClass3Empty(){
return class3.isEmpty();
}
公共布尔容器Class3(Class3 Class3){
返回this.class3.contains(class3);
}
公共类3(集合类3){
返回此.class3.containsAll(class3);
}
public int class3Size(){
返回class3.size();
}
公共类3[]类3目录(){
返回class3.toArray(新的class3[class3.size()]);
}
公共无效集合类别3(集合类别3){
这个.class3=class3;
}
公共布尔addClass3(Class3 Class3){
返回此.class3.add(class3);
}
公共布尔removeClass3(Class3 Class3){
返回此.class3.remove(class3);
}
公共无效clearClass3(){
这个.class3.clear();
}
}
公共班级3{
私有类2 Class2=null;
公共类2 getClass2(){
返回类2;
}
公共无效集合Class2(Class2 Class2){
this.class2=class2;
}
}
希望这有帮助