如何以面向对象的方式设计这个概念?

时间:2013-12-08 22:24:58

标签: java oop

我在设计方面遇到了一些问题。也许我认为这一切都错了,但似乎我设计的只能以程序的方式运作良好。

游戏

我正在开发一款游戏,这个游戏里面有大约10-20名玩家,包括3轮。当玩家启动游戏时,服务器从数据库加载数据,将其存储在java类中,并将请求的数据发送给客户端。让我们称之为Player.java。这个课程在游戏轮次之间持续存在 游戏中的每个玩家也都有角色。此角色在每轮之间发生变化,我需要以某种方式将此角色与Player.java相关联。现在我有3个角色:猎人搜索者观众。每个角色都有相同的基本内容:onDeath()onRespawn()onKill(KillEvent event)。我还需要能够轻松检查玩家的角色。 (例如,将角色与枚举链接起来)。

问题

我现在遇到的问题是如何以OOP方式实现?最初,我将每个角色都作为实现Role.java的类,每次创建角色时,构造函数中都需要Player。直到我开始在轮次中间和每轮结束后改变人们的角色之前,这一切都很好。如果我一直将玩家角色设置为新对象,那对我来说似乎是不好的做法。

摘要

总结一下(因为我在描述事情时很糟糕),似乎所有这些都能以程序的方式完美地运作,但我无法弄清楚我的生活是实现这个概念的好方法使用OOP。我现在实现它的方式,每个Player都有一个枚举,说明它们是什么角色,并且要更改该角色,我只需更改Player中的枚举。尽管如此,一旦我进入游戏逻辑,我最终会得到一个嵌套if语句的TON,我认为可以通过一些多态来大大减少。

因此,以一个问题结束,以面向对象的方式实现此(或该系统的略微修改版本)的良好攻击计划,而不必始终创建从旧对象接收数据的新对象? (我对OOP没有太多经验,但对我来说这似乎是一个坏主意)

1 个答案:

答案 0 :(得分:2)

我想我会选择这个解决方案:

  • 使Player成为界面
  • 为它创建一个Proxy-Class(一个只有一个属性的类,类型为Player,并将所有方法重定向到该对象)。让我们称之为ConcretePlayer
  • 添加setRole方法,将角色转为ConcretePlayer
  • Role实施Player
  • 像您一样创建Role的子类,每个子类在其构造函数中都使用ConcretePlayer
  • 存储ConcretePlayer
  • 中所有角色共享的统计信息
  • 从外部使用PlayerConcretePlayer访问所有内容。

它没有完美的充实,但我认为你明白了。您可能会发现RolePlayer不应该共享相同的接口,或者您想为回调创建自己的接口,但这取决于您的其余代码和用例。