我在寫一篇小小的足球經理遊戲時遇到了以下問題。 我有班人員,球員,教練,經理。 人是其他人的基類。問題在於玩家也可以成爲教練和/或經理。通過增加更多的角色(例如守衛),我會變得越來越複雜 - 那麼,你如何有效地實現這一點?那是不是有一個模式?如何在Java中爲多個繼承對象建模
3
A
回答
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);
}
這樣一個人可以有任意數量的角色。
相關問題
- 1. 如何在面向對象編程中爲繼承建模
- 2. Java對象類和多繼承
- 3. 繼承和創建對象
- 4. 創建一個繼承對象數組
- 5. 如何將繼承對象的列表轉換爲Java中的對象集合?
- 6. 驗證java中的值對象(繼承)
- 7. 繼承Java中的對象類
- 8. 如何讓對象繼承其原型中的兩個對象?
- 9. 試圖在多對多關係中保存對象(多繼承)
- 10. 繼承Django模型中的python對象
- 11. 如何在JavaScript中建立對象之間的繼承關係?
- 12. 如何創建從父對象繼承的對象?
- 13. 對象創建使用繼承在require.js
- 14. 繼承和抽象如何與多個類一起工作? [java]
- 15. 如何繼承django中的對象?
- 16. 從2個對象繼承
- 17. 如何在一個對象中繼承三個數據契約?
- 18. 繼承對象在Java中打印爲null
- 19. java創建一個從不同類繼承的對象的ArrayList
- 20. 如何模擬多重繼承在C#
- 21. 如何將兩個父對象繼承到子對象,但第二個繼承對象的參數是第一個繼承對象
- 22. 如何實現與多個子對象的繼承.net
- 23. 如何「正確地」創建一個從Element繼承的對象?
- 24. JAVA返回父對象 - 從繼承的繼承 - 生成器模式
- 25. 如何投界面對象爲特定繼承的對象
- 26. 多繼承和Java
- 27. java和多繼承
- 28. Android/Java中的多繼承
- 29. 如何在基礎模型繼承中爲django中的一對一字段創建多個實例?
- 30. 在c中創建一個繼承類的對象#
是的,繼承構成。 – 2010-12-21 15:39:06