Цель: у нас есть студенты и университеты
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 как
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();