2013-05-11 3 views
2

Я пишу игру на Java. Это плохая практика, чтобы иметь дело, какJava "global" object

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

(мышь и клавиатура являются объектами, которые возвращают вход)

Или было бы preferrable иметь объект с этими полями, переданный объекты, которые нуждаются в них ?

Спасибо.

ответ

3

A singleton pattern - это то, что вам нужно.

Обратите особое внимание на раздел The solution of Bill Pugh - это очень чистая реализация поточно-надежного ленивого инициализационного синглтона, использующего спецификацию языка java, чтобы сделать его потокобезопасным.

Модели одноэлементного типа, как правило, нахмурились, поскольку он делает модульное тестирование практически невозможным. Обычно это делается через фреймворки зависимости, такие как Guice или Spring.

В зависимости от того, где вы используете приложение, часто существует какой-то «контекст», в котором вы можете хранить одиночные игры, например, ServletContext в веб-приложении. Это дает вам лучшее из обоих миров.

0

Его обычно лучше разместить в объекте или, по крайней мере, предоставить для них геттер и сеттеры. Причина в том, что вы часто можете столкнуться с проблемами параллелизма при прямом доступе к объекту из нескольких потоков (что очень часто происходит с графикой и интерфейсами). Поэтому, если вы не знаете, что объект, к которому вы обращаетесь, является потокобезопасным, его лучше справиться с параллелизмом самостоятельно логичным образом.

0

Все должно быть в порядке. Помните, что если вы хотите, чтобы объект в классе Constants был изменен из внешнего источника, вы должны объявить константы как статические. Однако убедитесь, что местоположение объекта является потокобезопасным. Много людей, вероятно, опубликуют здесь причудливые условия, но то, что у вас должно быть, должно быть в порядке.

0

Вы также можете ознакомиться с Singleton Design Pattern. Известные образцы дизайна бандой из четырех человек обычно приветствуются решениями для общих проблем программирования. Посмотрите на Википедию или Google.

Смежные вопросы