我有一个游戏,可以在每场比赛后跟踪用户统计数据,例如他们走了多远,他们攻击了多少次,他们跌倒了多远,等等,我当前的实现看起来有点如下(简化版本):
Class Player{
int id;
public Player(){
int id = Math.random()*100000;
PlayerData.players.put(id,new PlayerData());
}
public void jump(){
//Logic to make the user jump
//...
//call the playerManager
PlayerManager.jump(this);
}
public void attack(Player target){
//logic to attack the player
//...
//call the player manager
PlayerManager.attack(this,target);
}
}
Class PlayerData{
public static HashMap<int, PlayerData> players = new HashMap<int,PlayerData>();
int id;
int timesJumped;
int timesAttacked;
}
public void incrementJumped(){
timesJumped++;
}
public void incrementAttacked(){
timesAttacked++;
}
}
Class PlayerManager{
public static void jump(Player player){
players.get(player.getId()).incrementJumped();
}
public void incrementAttacked(Player player, Player target){
players.get(player.getId()).incrementAttacked();
}
}
所以我有一个 PlayerData 类,它保存所有统计数据,并将其从玩家类中取出,因为它不是玩家逻辑的一部分。然后我有 PlayerManager,它位于服务器上,控制玩家之间的交互(排除了很多执行此操作的逻辑,因此我可以保持简单)。我将对 PlayerData 类的调用放在 Manager 类中,因为有时您必须在玩家之间进行某些检查,例如,如果攻击确实命中,则增加“attackHits”。
主要问题(在我看来,如果我错了,请纠正我)是它的可扩展性不是很好。如果我想通过添加方法和字段来跟踪新的统计信息,我将必须接触 PlayerData 类,然后我必须向我的 PlayerManager 添加更多方法,因此它不是很模块化。
如果您能推荐对此进行改进,我将非常感激。谢谢。
最佳答案
我根本不是设计模式方面的专家。但这是我认为可能有用的:
要向玩家添加操作,您可能需要查看策略模式。只要用谷歌搜索一下,你就会得到很多例子。
这是我的尝试:
对于更新玩家统计数据,我想观察者模式会有所帮助。
The Observer Pattern defines one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically.
它强制松散耦合,以便将来的更改变得容易。
(您必须阅读有关观察者模式的内容,并且还必须查看一些示例。它不像策略那么简单。)
关于java - 寻找合适的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8272618/