gpt4 book ai didi

java - 循环依赖——总是错的?

转载 作者:行者123 更新时间:2023-12-02 05:44:37 25 4
gpt4 key购买 nike

1.我想知道下面的结构是否不正确,是什么原因,有什么解决办法:假设我已经为网络游戏实现了一个客户端客户端有 2 个主要包:
A.GUI - 控制所有 Swing Jpanels 等
B.逻辑引擎

在 Logic 引擎中,我有一个名为 clientThread 的类,其主要目标是与服务器通信以获取要在 Gui 面板上执行的命令,并根据用户在 Gui 面板上的选择将信息发回..

2.为了这样做,我倾向于在 clientThread 中保存我的主 Gui 面板的引用,反之亦然,在不同项目的两个类之间进行循环引用是错误的吗?

3. 在面向对象编程的问题上,从类中执行要在 Gui 上显示的内容(例如客户端线程,尽管它在逻辑引擎包中,但它以某种方式负责管理游戏流程)是否错误?

4.此外,如果 Gui 部分知道并使用逻辑部分,这是一个问题吗?

想听听一些建议
非常感谢

最佳答案

很明显,GUI 应该依赖于引擎,而不是相反(而且,上帝保佑,它们不应该相互依赖)。

您的问题实际上很常见并且很容易解决。引擎线程应该允许客户端代码安装一个监听器,每次发生事情时都会收到通知。比 GUI 实现该监听器并安装它。请注意,游戏逻辑引擎只知道监听器接口(interface),而不是位于您的 GUUI 包中的特定实现。

这是 Observer 的一个实现模式,它有几个优点:

  • 通知代码(逻辑)不与“感兴趣的”代码(GUI)耦合,引擎与 GUI 之间不存在依赖关系
  • 您可以插入监听器/观察器的任何实现,例如将 Swing 应用程序更改为控制台/移动/网络应用程序,而无需对引擎进行任何更改。
  • 您可以有多个听众,例如一个用于更新 GUI,第二个用于运行声音等。

最后,从逻辑线程操作 GUI 没有任何问题,但是您必须注意 event dispatching thread .

关于java - 循环依赖——总是错的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7576109/

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