我理解理论上的差异,但代码实现有何不同?有人可以提供一些例子吗?
答案 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将会是什么。我们需要问鲍勃。但鲍勃不知道。因此,我们从构图到双重渲染,并创建类似于
的smtclass 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)
组合实际上是单向关联 - 除了在语义上,我们将其解释为“该事物是这件事的一部分”,而不仅仅是“这件事具有对该事物的引用”。