繁体   English   中英

Java中的组合与双向关联

[英]Composition vs Bi-directional Association in Java

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

目的是我们有学生和大学

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

而且,比smt像university.contains(bob)

但是,如果我们没有与university的联系,那将会怎样。 我们需要问鲍勃。 但是鲍勃不知道。 所以我们从合成到双向,然后像

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();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM