Запрос о моделировании глобальных переменных в Java - PullRequest
0 голосов
/ 19 декабря 2011

У меня есть вопрос, и я полагаю, что для большинства здесь это тривиально.Тем не менее, здесь идет - у меня есть приложение, которое подключается к базе данных для чтения конкретной информации.Теперь это чтение происходит во многих классах приложения для каждого запроса. Итак, я хотел ограничить количество подключений к базе данных до 1 на запрос .Вот что я сделал.

Предполагая, что у меня есть класс доступа к базе данных, DBAccess, который выбирает 2 строки, a & b.

Я написал класс Global, который выглядит следующим образом -

    public class Global {
        static String a;
        static String b;

        public Global(DBAccessInput input) throws Exception {
            super();
            DBAccess dbtool= new DBAccess(input);
            a=dbtool.getA();
            b=dbtool.getB();
        }
}

Так что теперь я могу пойти дальше и получить доступ к a & b как Global.a и Global.b в других классах через приложение.Но это мне кажется неправильным, потому что для заполнения a & bi потребуется создать экземпляр объекта Global, и тогда я вернусь к доступу к a & b как Global.a, а также к b.Я мог бы поместить все вещи, которые есть в конструкторе Global, в статический блок, но это все равно не помогло бы, так как мне все еще нужно было бы создать экземпляр объекта Global для передачи 'input' в DBAccess.

Любая помощьили указатели в правильном направлении очень помогли бы.

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011

Вы можете создать эти статические переменные в статическом методе global вместо конструктора Но это не очень хороший стиль:

static initialize(DBAccessInput input) {
     a = ...
     b = ...
}
1 голос
/ 19 декабря 2011

Вам не нужно создавать экземпляр Global для доступа к его статическим членам.Статические члены доступны по имени класса вообще без объекта.Так что ваш подход разумен.

Существуют следующие распространенные методы работы с «глобальными» объектами.

  1. Статические члены (почти ваш подход)
  2. Шаблон Singleton
  3. Локальный поток.

На вашем месте я бы сделал DBAccess синглтон, чтобы вы могли получить доступ к базе данных в любое время: DBAccess.getInstance().find("the query")

Кстати, посмотритев инструментах, которые уже реализовали слой доступа к БД.Например, iBatis, Hibernate, JPA.

...