Если вы знаете, что вам понадобится больше гибкости, вы можете перейти от отношения is-a к has-a .
has-a будет набором ролей , которые может иметь человек, например, роль учителя или роль студента.Или и то и другое, например, если студент читает лекции ..
Простой пример, демонстрирующий этот подход:
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
}
}