Java &引用;管理的;取决于;经理;结构
我的DependancyInject存在结构问题 形势 我正在为基于体素的游戏创建服务器;它是完全调制的,但相关模块如下3所示 网络模块(发送和接收数据包) WorldModule(处理世界相关事件并存储世界) 世界(存储所有区块,并有世界上的玩家列表) 块(具有材质和一些其他字段) 问题Java &引用;管理的;取决于;经理;结构,java,design-patterns,structure,Java,Design Patterns,Structure,我的DependancyInject存在结构问题 形势 我正在为基于体素的游戏创建服务器;它是完全调制的,但相关模块如下3所示 网络模块(发送和接收数据包) WorldModule(处理世界相关事件并存储世界) 世界(存储所有区块,并有世界上的玩家列表) 块(具有材质和一些其他字段) 问题 当在Block类中调用setMaterial(Material Material)方法时,应该向世界上所有的玩家发送一个“BlockChange”数据包,让客户端知道Block已经改变了类型。要发送该数据包,
当在Block类中调用setMaterial(Material Material)方法时,应该向世界上所有的玩家发送一个“BlockChange”数据包,让客户端知道Block已经改变了类型。要发送该数据包,Block类必须能够访问NetworkModule。WorldModule中存储有NetworkModule的实例。从技术上讲,这很容易解决,只需将WorldModule或NetworkModule传递到每个块类中。对我来说,这敲响了警钟,它将管理者与被管理者联系在一起,而且还浪费了节省实例的空间。我觉得必须有更好的方法来做到这一点,这样他们就不会相互依赖。您是否考虑过在游戏中添加“消息总线”模块 基本上,您希望在组件之间发送消息,而不是让它们彼此耦合。这是本次会议的目的 您可以创建组件订阅的主题,以获取状态更新。您的组件也可以发布到此主题,以通知其他组件其状态已更改 我不会详细介绍代码,因为我现在没有太多时间,但这里有一些想法:
- 您的
对象应该包含一个映射,其键是“主题”,值是“订阅者”列表Mediator
- 每当在特定主题中发布消息时,应通知所有订阅者
- 您的组件将“订阅”中介的相关主题,以便从其他组件接收更新
- 您的组件应该知道您的
。这应该是他们之间唯一的沟通方式。当组件状态更改时,它应该通过发布关于特定主题的消息(比如“BlockChange”)来通知其他组件中介
- 此消息不一定是纯文本。它可以是一个适当的对象,包含所有相关的数据,这些数据将允许其他组件知道这些更改。此消息甚至可能包含对已更改自身的对象的引用
这是一些一般性的想法,让我们看看您是否可以从这里获得一些东西…实现一个静态内存中事件发布器。
Block
类将使用该静态事件发布器发布BlockChange
消息,软件的另一部分将侦听该消息并在网络上重新发布。服务器本身确实使用我制作的此事件系统(全局静态事件处理程序)和(主服务器类有此事件的实例)。我不知道为什么我没有想到使用它哈哈。多谢各位!我想我会采纳你的建议,尽可能地分离我的模块,开始使用我的事件系统作为中介,而不是外部模块的更新海报。