依赖注入和聚合/关联

时间:2010-03-13 14:59:13

标签: dependency-injection associations aggregation uml

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

然后,构造函数注入是否意味着组合? 按照相同的逻辑,可以安全地说,setter注入会导致关联,而不是聚合吗?

2 个答案:

答案 0 :(得分:2)

聚合仅仅是关联的另一种表示。因此,setter注入会导致关联聚合 - 构造函数注入也是如此。

关于构造函数注入是否意味着组合是有争议的,因为根据对组合的严格解释,类本身必须负责复合类的构造和破坏。

答案 1 :(得分:0)

在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;
    }
}

希望这有帮助