如何在Java中建模多个继承对象

时间:2010-12-21 15:35:50

标签: java inheritance design-patterns

我正在写一个小小的足球经理游戏中遇到以下问题。 我有班级人员,球员,教练,经理。 Person是其他人的基类。问题是玩家也可以是教练和/或经理。通过添加更多角色(例如地面管理员),我会变得越来越复杂 - 所以,你怎么能有效地实现这个呢?那不是一个模式吗?

4 个答案:

答案 0 :(得分:9)

不要将角色建模为一种人。 Person应该有一个角色集合

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 :(得分:1)

我有一个Role接口,其实现类将Person包装为数据成员。 (AbstractRole在这里有意义。)

首选组合而不是继承,尤其是在这种情况下。

答案 2 :(得分:0)

这只是一个提案。

当我读到你的问题时,我知道你的玩家可能会在游戏中被“提升”或“降级”。例如,退役球员可能成为“教练”。

第二件事(你已经注意到)是一个人可能既是教练又是经理。

这就是为什么我会在类中创建角色 -s的集合。

角色可能是一个抽象类,它可能包含以下子类:

  • 播放器
  • 教练
  • 管理器

答案 3 :(得分:0)

您可以拥有此

的枚举类型
enum Role {
   Player, Coach, Manager, GroundsKeeper
}

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

这样一个人可以拥有任意数量的角色。