Как моделировать несколько объектов наследования в Java - PullRequest
3 голосов
/ 21 декабря 2010

У меня есть следующая проблема в небольшой футбольной игре, которую я пишу.У меня есть классы Персона, Игрок, Тренер, Менеджер.Человек - это базовый класс других.Проблема в том, что игрок также может быть тренером и / или менеджером.Добавляя больше ролей (например, начальник), я буду становиться все более и более сложным - так, как вы можете реализовать это эффективно?Разве для этого не существует шаблона?

Ответы [ 4 ]

9 голосов
/ 21 декабря 2010

Не смоделируйте роль как тип человека.Человек должен иметь коллекцию ролей

public enum Role {
  PLAYER,
  COACH,
  REF 
}

public class Player {
  private final String name;
  private Collection<Role> roles = new ArrayList<Role>();

  public Player(String name) {
    this.name = name;
  }

  public void addRole(Role role) {
    this.roles.add(role);
  }
 }
1 голос
/ 21 декабря 2010

У меня будет интерфейс Role, классы реализации которого обертывают Person как член данных.(AbstractRole имеет здесь смысл.)

Предпочитаю композицию наследованию, особенно в этом случае.

0 голосов
/ 21 декабря 2010

Вы можете иметь тип enum для этого

enum Role {
   Player, Coach, Manager, GroundsKeeper
}

class Person {
   final Set<Role> roles = EnumSet.noneOf(Role.class);
}

Таким образом, у человека может быть любое количество ролей.

0 голосов
/ 21 декабря 2010

Это будет только предложение.

Когда я читаю ваш вопрос, у меня возникает мысль, что ваш игрок может быть «повышен» или «понижен» во время игры.Например, отставной игрок может стать «тренером».

Второе (что вы уже заметили) - это то, что один человек может быть и тренером, и менеджером.

Именно поэтому я бы создал коллекцию ролей -ов в классе Person .

A Role можетбыть абстрактным классом и может иметь следующие подклассы:

  • Игрок
  • Тренер
  • Менеджер
  • и т. д.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...