[英]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.