处理多个对象时的良好编程风格

Gli*_*tch 10 java oop coding-style object shared-objects

我一直在编写一个棋盘游戏的软件版本.到目前为止,我已经编写了与游戏板上的物理对象相对应的类.我很喜欢编写程序逻辑,但是我发现很多逻辑类都需要访问相同的对象.

起初我将相应的对象传递给方法,因为它们被调用,但这变得非常乏味,特别是当方法需要许多对象来执行它们的任务时.为了解决这个问题,我创建了一个初始化和存储我需要的所有对象的类.这允许我通过调用Assets.dice()从任何类访问对象.

但是现在我已经考虑过了,这似乎不对.这就是为什么我在这里,我担心我创造了某种神级.这种恐惧是没有根据的,还是我创造了灾难的秘诀?

Mat*_*eer 7

你基本上碰到了单身模式.在大多数情况下,这是一个糟糕的模式.通过允许您的应用程序的任何部分几乎可以在任何时间访问这样的全局数据,最终会出现难以维护,调试以及最重要的测试代码.

我认为最好创建一个包含当前骰子,片段等的"上下文",并根据需要将上下文传递给需要使用它的方法/类.这是更清洁,虽然是的,它必须在任何地方传递它是一种痛苦.但是您可以获得以下优势:您可以跟踪谁在访问Context时,还可以创建模拟上下文以进行测试.如果将上下文传递给高级对象,并且必须将其传递给它的子组件,您就会从头到尾知道上下文是什么以及它来自何处.

另外,理想情况下,使Context不可变是很好的.这可能是不可能的.但是,如果你可以创建一个捕获当前状态并且不可变的新上下文,那么对于每个给定的转向,你可以减少你的应用程序的更多惊喜.