Глобальный доступ в Java - PullRequest
       31

Глобальный доступ в Java

5 голосов
/ 01 февраля 2011

В Java нет глобального доступа, как в C ++.Так что же делать, если они хотят создать контейнер объектов, к которому можно получить доступ из любого класса?Или, скажем, Java-бин, содержащий глобальные значения.

Например, если я создаю симулятор лифта, поля, которые должны быть известны всем, как int numElevators, должны быть где-то правильно?То же самое с объектом коллекции для лифтов Elevators[] elevators.

. Я могу придумать один способ - создать одноэлементный класс для хранения всех этих глобальных переменных.Затем используйте статические методы для обеспечения доступа из любого класса.Но есть ли более элегантное решение?

Ответы [ 5 ]

4 голосов
/ 01 февраля 2011

Я ожидаю, что экземпляр Building будет иметь коллекцию Elevators.Я думаю, что в проекте очень мало вещей, которые были бы действительно глобальными, и вы обычно можете найти какой-то управляющий объект, который должен содержать и распространять эти знания.

Связав это с такой сущностью, вы можете a) легче контролировать доступ и изменение / рефакторинг b) делать это и делать тестирование проще.

1 голос
/ 01 февраля 2011

Вы можете создать не одноэлементный класс с нужными полями и предоставить его экземпляр для любых нужд.

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

Например, вы могли бы начать с одного набора лифтов, но позже захотите несколько наборов для разных башен или зданий.

1 голос
/ 01 февраля 2011

Я могу придумать один способ - создать одноэлементный класс для хранения всех этих глобальных переменных. Затем используйте статические методы для обеспечения доступа из любого класса. Но есть ли более элегантное решение?

Нет, это способ сделать это. Сочетание статических методов и синглетонов.

0 голосов
/ 01 февраля 2011

Возможно, вы захотите заглянуть в Парадигму Monostate Design, если уклоняетесь от Singleton. Вот хороший вопрос по StackOverflow.

Monostate vs. Singleton

0 голосов
/ 01 февраля 2011

Вы можете создать класс с кучей открытых статических полей.Что-то вроде

class AppGlobals {
   public static final String IMPORTANT_STUFF = "something global...";
   ....

}

Или вы можете прочитать в конфигурации свойств, чтобы получить простые данные, такие как строки и еще много чего.

Вы также можете объединить 1 и 2.

Редактировать -- для вашего примера лифта / зданий, правильное проектирование ОО устранит необходимость в глобальных параметрах ....

...