2010-03-13 79 views
3

在关联和聚合中,一个类维护对另一个类的引用。依赖注入和聚集/关联

那么,构造函数注入是否意味着构图? 按照相同的逻辑,可以肯定地说,setter注入导致关联,而不是聚合?

回答

2

聚合仅仅是关联的另一种表示形式。因此,setter注入导致关联聚合 - 就像构造函数注入一样。

构造函数注入是否意味着构成是值得商榷的,因为根据对构图的严格解释,类本身必须对构造和破坏复合类负责。

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级是相同的代码为Class 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; 
    } 
} 

希望这有助于

+0

这是相当多的不可解析 - 它需要一个更加清晰...... – 2011-07-13 14:26:28