2010-12-21 48 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); 
} 

這樣一個人可以有任意數量的角色。