後でもっと柔軟性が必要であることがわかっている場合は、is-a からhas-a関係に移行することを検討してください。
has-aは、教師の役割や学生の役割など、Person が持つことができる一連の役割になります。または両方、学生が講義を行っている場合のように..
このアプローチを示す簡単な例:
public enum Role {TEACHER, STUDENT}
public class Person {
Set<Role> roles = new HashSet<Role>();
public Person() {
// a person does not have roles initially
}
public boolean addRole(Role aRole) {
return roles.add(aRole);
}
public boolean hasRole(Role aRole) {
return roles.contains(aRole);
}
// ...
}
public void someMethod(Person person) {
if (Person.hasRole(Role.TEACHER)) {
// do teacher stuff
}
if (Person.hasRole(Role.STUDENT)) {
// do student stuff
// Note: persons may be Teacher AND Student at the same time
}
}