组合与Java中的双向关联

时间:2010-12-06 13:26:20

标签: java associations composition

我理解理论上的差异,但代码实现有何不同?有人可以提供一些例子吗?

2 个答案:

答案 0 :(得分:3)

目的我们有学生和大学

class University {
    private final Set<Student> students = new HashSet<Student>();
    void addStudent(Student s){students.add(s);}
}

class Student {
    private final String name;
    public Student(String name) {
        this.name = name;
    }
}

我们以某种方式创建这些东西

University university = new University();
Student bob = new Student("Bob");
university.addStudent(bob);

知道我们需要知道鲍勃在大学学习吗? 所以我们为大学创造了一些新的方法

boolean contains(Student student){
        for(Student s : students){
            if(s.equals(student)) return true;
        }
        return false;
    }

,而不是像university.contains(bob)那样的smt。

但如果我们没有链接到uniwersity将会是什么。我们需要问鲍勃。但鲍勃不知道。因此,我们从构图到双重渲染,并创建类似于

的smt
class University {
    private final Set<Student> students = new HashSet<Student>();
    void addStudent(Student s){
        students.add(s);
        s.setUniversity(this);
    }
    boolean contains(Student student){
        for(Student s : students){
            if(s.equals(student)) return true;
        }
        return false;
    }
}

class Student {
    private final String name;
    private University university;
    public Student(String name) {
        this.name = name;
    }
    void setUniversity(University u){
        university = u;
    }
    boolean doYouStudyInUniversity(){
        return university != null;
    }
}
//ask
bob.doYouStudyInUniversity();

答案 1 :(得分:0)

组合实际上是单向关联 - 除了在语义上,我们将其解释为“该事物是这件事的一部分”,而不仅仅是“这件事具有对该事物的引用”。