2

我正在用 Java 编写游戏。有类似的东西是不好的做法

public class Constants
{
    public static Mouse mouse;
    public static Keyboard keyboard;
}

(鼠标和键盘是返回输入的对象)

还是最好将具有这些字段的对象传递给需要它们的对象?

谢谢。

4

4 回答 4

3

单例模式是您所追求的。

特别注意Bill Pugh部分的解决方案 - 这是一个非常干净的线程安全延迟初始化单例实现,利用 java 语言规范使其线程安全。

单例模式现在通常不受欢迎,因为它使单元测试几乎不可能。通常这是通过像GuiceSpring这样的依赖注入框架来完成的。

根据您运行应用程序的位置,通常有某种“上下文”可以存储单例 - 例如ServletContext在 Web 应用程序中。这为您提供了两全其美的体验。

于 2013-05-11T23:10:50.947 回答
0

通常最好将它们放入一个对象中,或者至少为它们提供 getter 和 setter。原因是当您直接从多个线程访问对象时经常会遇到并发问题(这在图形和界面中经常发生)。因此,除非您知道您正在访问的对象是线程安全的,否则最好以逻辑方式自己处理并发。

于 2013-05-11T23:08:41.927 回答
0

你应该没事。请记住,如果您希望从外部源修改常量类中的对象,则必须将常量声明为静态。但是,请确保对象的位置是线程安全的。很多人可能会在这里发布花哨的术语,但你所拥有的应该没问题。

于 2013-05-11T23:12:39.967 回答
0

您还可以熟悉单例设计模式。著名的四人组设计模式是常见编程问题的常见解决方案。在 Wikipedia 或 Google 上查找。

于 2013-05-11T23:13:47.037 回答