"管理"取决于"经理"结构体

时间:2015-12-29 20:20:50

标签: java design-patterns structure

我有DependancyInject的结构问题。

情况

我正致力于为基于体素的游戏创建服务器;它完全被调制,但相关模块如下3。

NetworkModule(发送和接收数据包) WorldModule(处理世界相关事件和商店世界) 世界(存储所有区块并列出世界各地的球员) 阻止(有材料和其他一些领域)

问题

当在Block类中调用setMaterial(Material material)方法时," BlockChange"应该将数据包发送给世界上的所有玩家,让客户知道该块已经改变了类型。要发送该数据包,Block类必须能够访问NetworkModule。 WorldModule中存储了一个NetworkModule实例。从技术上讲,这可以很容易地解决,只需将WorldModule或NetworkModule传递到每个Block类中。对我来说,敲响了警钟,它将经理与管理人员联系在一起,同时也浪费了节省空间的实例。我觉得必须有一个更好的方法来做到这一点,使他们不相互依赖。

1 个答案:

答案 0 :(得分:1)

您是否考虑在游戏中添加“消息总线”模块?

基本上,您希望在组件之间发送消息,而不是将它们相互耦合。这是Mediator Pattern的目标。

您可以创建组件订阅的主题,以获取状态更新。您的组件也可以发布到此主题,以通知其他组件其状态已更改。

我不会输入代码的详细信息,因为我现在没有太多时间,但这里有一些想法:

  • 您的Mediator对象应该包含一个地图,其键是“主题”,值是“订阅者”列表
  • 每当在特定主题中发布消息时,都应通知所有订阅者
  • 您的组件将“订阅”Mediator的相关主题,以便从另一方接收更新。
  • 您的组件应该知道您的Mediator。这应该是他们之间沟通的唯一手段。当组件状态发生变化时,它应该通过发布关于特定主题的消息来通知其他人(假设“BlockChange”)。
  • 此消息不一定是纯文本。它可能是一个适当的对象,包含所有相关数据,允许其他组件了解更改。此消息甚至可以包含对已更改自身的对象的引用。

这是一些一般性的想法,让我们看看你是否可以从这里到达某个地方......