2010-12-21 51 views
3

我在写一篇小小的足球经理游戏时遇到了以下问题。 我有班人员,球员,教练,经理。 人是其他人的基类。问题在于玩家也可以成为教练和/或经理。通过增加更多的角色(例如守卫),我会变得越来越复杂 - 那么,你如何有效地实现这一点?那是不是有一个模式?如何在Java中为多个继承对象建模

+0

是的,继承构成。 – 2010-12-21 15:39:06

回答

1

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

更喜欢继承的组合,特别是在这种情况下。

9

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

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 - 另一个更好的主意。 – duffymo 2010-12-21 15:39:47

0

这将只是一个建议。

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

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

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

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

  • 球员
  • 教练
  • 经理
0

你可以对此有一个枚举类型

enum Role { 
    Player, Coach, Manager, GroundsKeeper 
} 

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

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