最近我遇到了问题,因为我的代码最终需要一个类来存储另一个类的实例,而另一个类需要存储第一个类的实例。 我感觉好像这是糟糕的设计,而且我一直试图想出更好的设计,但是我提出的任何设计显然都会导致较差的性能。 (需要迭代的列表只是为了找到某些东西,否则我不需要)有没有更好的方法让两个类互相访问?
例如,我正在研究一个服务器端系统,我会给你基本概要以便您可以看到我的意思是。
表示Server类包含World和NetworkHandler的实例。
当客户端连接到服务器时,会通知NetworkHandler并将通道存储在Session对象中。 登录后,会创建一个Player实例并添加到World中。
这里的东西变得奇怪。我尝试让Session持有Player的实例,Player则持有Session的实例。这似乎效果最好,但我觉得应该有更好的方法。
至于为什么我需要他们从两个地方访问,NetworkHandler会传递附加到通道的会话,并以这种方式处理数据包。 (这必须能够访问连接到会话的玩家)
但是,有时,世界需要遍历玩家并访问他们所连接的会话。 (如断开它们)
谢谢你的任何帮助,如果有什么不清楚的地方问。
感谢您的回复。我认为,如果我不使用像Netty这样的异步网络库,它会不那么令人困惑。 为了给你一个我处理网络的方式背景,我构建了一个基于解码器的系统。每个会话都有一个解码器的实例,并且针对不同的状态有不同的解码器。 (登录,播放等)。 我不知道我该如何拆分它,所以现在我会离开这两个类,并希望我可以考虑更好的设计,因为我重构了系统的其他部分。 – grundyboy34 2014-10-17 02:02:56
我想我只是想出了如何将其设计成更好的系统。如上所述,每个会话可以更改为不同的解码器。当解码器进入处理世界逻辑的WorldDecoder时,我需要Couple Player和Session时遇到的问题。所以我所能做的就是保持一切,但同样给世界自己的NetworkHandler,并且会话内的会话将被迫使用WorldDecoder。这也将提供托管多个世界的能力,并在需要时使用服务器作为主要集线器。 – grundyboy34 2014-10-17 02:21:31