あなたがいることを知っている場合後で柔軟性が必要な場合は、is-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
}
}
のinstanceofの使用を演算子は通常、多型の不正使用を示します。 Headmaster、Parent、School Inspector、Kitchen Staff、Caretaker、Secretary、Teaching AssistantのようなPersonの新しい役割を導入すると、instanceof演算子はすぐに非常にスケーラブルになり、この複数のif/elseの検査のインスタンスは非常に高価です。 –