gpt4 book ai didi

java - "managed"取决于 "manager"结构

转载 作者:行者123 更新时间:2023-11-30 07:42:02 27 4
gpt4 key购买 nike

我的 DependancyInject 存在结构问题。

情况

我正在为基于体素的游戏创建服务器;它是完全调制的,但相关模块有以下3个。

NetworkModule(发送和接收数据包)WorldModule(处理世界相关事件并存储世界)世界(存储所有区 block 并拥有世界上的玩家列表) block (有 Material ,和一些其他字段)

问题

当Block类中调用setMaterial(Materialmaterial)方法时,应该向世界上所有玩家发送一个“BlockChange”数据包,让客户端知道该 block 已经改变了类型。要发送该数据包,Block 类必须有权访问 NetworkModule。 WorldModule 内存储有一个 NetworkModule 实例。从技术上讲,这很容易解决,只需将 WorldModule 或 NetworkModule 传递到每个 Block 类中即可。对我来说,这敲响了警钟,它将管理器与托管对象联系在一起,并且还浪费了保存该实例的空间。我觉得必须有更好的方法来做到这一点,这样它们就不会相互依赖。

最佳答案

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

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

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

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

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

这是一些一般性的想法,让我们看看您是否可以从这里得到一些东西......

关于java - "managed"取决于 "manager"结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34518449/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com