Java"全球"宾语

时间:2013-05-11 23:06:08

标签: java object global

我正在用Java编写游戏。有一个像

这样的事情是不好的做法
public class Constants
{
    public static Mouse mouse;
    public static Keyboard keyboard;
}

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

或者更喜欢将这些字段的对象传递给需要它们的对象?

感谢。

4 个答案:

答案 0 :(得分:3)

你正在追求singleton pattern

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

单身模式现在通常不受欢迎,因为它几乎不可能进行单元测试。通常现在通过依赖注入框架来完成,例如GuiceSpring

根据您运行应用程序的位置,通常会有一些“上下文”可以存储单例 - 例如Web应用程序中的ServletContext。这给你两全其美。

答案 1 :(得分:0)

通常最好将它们放入一个物体中,或者至少为它们提供吸气剂和固定剂。原因是,当您直接从多个线程访问对象时,您经常会遇到并发问题(图形和接口会发生很多事情)。因此,除非您知道您正在访问的对象是线程安全的,否则最好以合理的方式自行处理并发。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您还可以熟悉 Singleton 设计模式。四个一组的着名设计模式是常见编程问题的常用解决方案。 在维基百科或谷歌上查找。