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