Java 循环依赖-总是错误的?
1.我想知道以下结构是否不正确,原因是什么,解决方法是什么: 假设我已经为网络游戏实现了一个客户端 客户端有两个主要包:Java 循环依赖-总是错误的?,java,oop,swing,sockets,cyclic-reference,Java,Oop,Swing,Sockets,Cyclic Reference,1.我想知道以下结构是否不正确,原因是什么,解决方法是什么: 假设我已经为网络游戏实现了一个客户端 客户端有两个主要包: A.GUI-按住所有swing JPanel等 逻辑引擎 在Logic engine中,我有一个名为clientThread的类,其主要目标是与服务器通信,以获取要在Gui面板上执行的命令,并根据用户在Gui面板上的选择将信息发送回 2.为了做到这一点,我倾向于在clientThread中保留我的主Gui面板的引用,反之亦然,在两个不同项目的类之间进行循环引用是否有错 3.在
A.GUI-按住所有swing JPanel等
逻辑引擎 在Logic engine中,我有一个名为clientThread的类,其主要目标是与服务器通信,以获取要在Gui面板上执行的命令,并根据用户在Gui面板上的选择将信息发送回 2.为了做到这一点,我倾向于在clientThread中保留我的主Gui面板的引用,反之亦然,在两个不同项目的类之间进行循环引用是否有错 3.在面向对象编程中,从类内执行Gui上显示的内容(如客户端线程)是错误的吗?客户端线程以某种方式负责管理游戏流程,尽管它位于逻辑引擎包上 4.此外,如果Gui部件知道并使用逻辑部件,这是一个问题吗 希望听到一些建议
非常感谢显然,GUI应该依赖于引擎,而不是相反(而且,上帝禁止,它们不应该相互依赖) 你的问题其实很常见,解决起来也很简单。引擎线程应该允许客户端代码安装一个监听器,该监听器将在每次发生事件时得到通知。然后GUI实现并安装该侦听器。请注意,游戏逻辑引擎只知道侦听器接口,而不知道GUI包中的特定实现 这是该模式的一个实现,它有几个优点:
- 通知代码(逻辑)与“感兴趣的”代码(GUI)不耦合,引擎与GUI之间没有依赖关系
- 您可以插入listener/observer的任何实现,例如将Swing应用程序更改为console/mobile/web应用程序,而无需对引擎进行任何更改
- 您可以有多个侦听器,例如一个用于更新GUI,另一个用于运行声音,等等
再看看这个,好吧,如果我没听错的话。GUI应该保存对引擎的引用,但是引擎应该通过将安装在引擎上的侦听器和GUI中的观察者与GUI通信,以监视侦听器。您是否有一些相关的例子可以这样做,因为GUI是基于Swing的,并且有一个EventListener选项可以很好地与Swing配合使用,是正确的还是我不需要它?Swing是一个很好的例子。按下按钮后,Swing将运行与其关联的
ActionListener
。Swing按钮显然不依赖于响应按钮按下的代码。按钮只依赖于您正在实现的侦听器抽象接口。在您的情况下,引擎依赖于侦听器接口,您的GUI(窗口、框架或任何其他类)实现该侦听器。