gpt4 book ai didi

java - 有没有更好的方法让两个类相互访问?

转载 作者:行者123 更新时间:2023-11-29 05:16:24 24 4
gpt4 key购买 nike

我最近遇到了一些问题,因为我的代码最终需要一个类来存储另一个类的实例,而另一个类来存储第一个类的实例。我觉得这是一个糟糕的设计,我一直在努力想出一个更好的设计,但我想出的任何一个设计显然都会导致更差的性能。 (需要列表的迭代只是为了找到一些东西,否则我就不必这样做了。)

例如,我正在做一个服务器端系统,我会给你一个基本的轮廓,这样你就可以明白我的意思了。

假设 Server 类包含 World 和 NetworkHandler 的实例。

当客户端连接到服务器时,NetworkHandler 会收到通知,并将 channel 存储在 Session 对象中。登录后,将创建一个 Player 实例并将其添加到世界。

这就是事情变得奇怪的地方。我尝试让 Session 持有一个 Player 实例,让 Player 持有一个 Session 实例。这似乎效果最好,但我觉得必须有更好的方法。

至于为什么我需要从两个地方访问它们,NetworkHandler 被传递到附加到 channel 的 session ,并以这种方式处理数据包。 (这必须能够访问附加到 session 的播放器)

但是,有时,世界需要遍历玩家并访问他们所附加的 session 。 (比如断开它们)

感谢您的帮助,如果有任何不清楚的地方,请询问。

最佳答案

我能想到的另一种架构是“事件驱动”,它应该在这种情况下解耦对象。 (当然,它也有缺点,事件驱动代码可能非常复杂)。

例如,您可以在所有 session 都可以响应的队列中放置一个断开连接事件,而不是遍历玩家来断开它们。 session 可以将事件放入队列中,每个玩家只能收听来自其各自 session 的事件。

关于java - 有没有更好的方法让两个类相互访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26416592/

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