代码之家  ›  专栏  ›  技术社区  ›  Abhijeet Kashnia

依赖项注入和聚合/关联

  •  3
  • Abhijeet Kashnia  · 技术社区  · 15 年前

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

    那么,构造器注入是否意味着组成? 按照同样的逻辑,可以说setter注入导致了关联,而不是聚合吗?

    2 回复  |  直到 13 年前
        1
  •  2
  •   Randolpho    15 年前

    聚合只是关联的另一种表示。所以setter注入导致了 聚合——和构造函数注入一样。

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

        2
  •  0
  •   Boehm    13 年前

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

    希望这有帮助