Вам понадобится List<Person>
.Ваша диаграмма предлагает наследование, поэтому вы захотите иметь коллекцию суперкласса и позволить полиморфизму делать все остальное.
Ваш код может сделать это:
List<Person> people = new ArrayList<Person>();
// Any class that extends person can be added
people.add(new Customer());
people.add(new FieldEngineer());
for (Person person : people) {
System.out.println(person);
}
Ваш дизайн в выражениине позволят инженерам стать клиентами или инженерами по продажам, чтобы выйти на поле, но это проклятие наследования в таких случаях, как ваш.
Лучший дизайн, если вам нужна гибкость, может заключаться в сохраненииКласс Person и назначение Person роли в стиле декоратора.
Декоратор добавил бы поведение, используя композицию, а не наследование, например:
public class Customer {
private Person person;
public Customer(Person p) { this.person = p; }
public void buyIt() { // do something customer like here }
}
public class FieldEngineer {
private Person person;
public FieldEngineer(Person p) { this.person = p; }
public void fixIt() { // do something field engineer like here }
}