java - 寻找合适的设计模式

标签 java design-patterns

我有一个游戏,可以在每场比赛后跟踪用户统计数据,例如他们走了多远,他们攻击了多少次,他们跌倒了多远,等等,我当前的实现看起来有点如下(简化版本):

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 添加更多方法,因此它不是很模块化。

如果您能推荐对此进行改进,我将非常感激。谢谢。

最佳答案

我根本不是设计模式方面的专家。但这是我认为可能有用的:

要向玩家添加操作,您可能需要查看策略模式。只要用谷歌搜索一下,你就会得到很多例子。

这是我的尝试: enter image description here

对于更新玩家统计数据,我想观察者模式会有所帮助。

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/

相关文章:

java - 澄清二叉搜索树中的有序遍历

c# - 哪种设计模式用于灵活的消息发送?

Java设计模式代码解释

c# - C#中的工厂模式实现

javascript - 如何使用 Spring 响应下载 excel 文件

java - 禁用 JTable 上的列标题排序

java - 查找一组矩形的 Rectangle 和 Union 之间的交集?

Java 或 PHP 服务器端 Web 应用程序以及为什么?

java - 构建器模式由什么组成?

java - 练习您的微架构技能