как использовать один экземпляр объекта в моем приложении - PullRequest
0 голосов
/ 13 августа 2010

У меня есть один класс отдела. Я хочу создать один отдел отдела со значением HR и один экземпляр отдела со значением Admin, когда мое приложение загружается (консольное приложение), а затем я хочу использовать эти экземпляры во всей моей программе. Как можно я использую одни и те же экземпляры везде в разных классах?. Например, я читаю сотрудника из CSV-файла, а затем создаю объект сотрудника. Теперь, чтобы создать объект сотрудника, я должен использовать объект отдела. Я должен установить правильное значение отдела в зависимости от Значение отдела читается из файла. Как это сделать

Ответы [ 3 ]

2 голосов
/ 13 августа 2010

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

private static Department hr = null;

private Department() {
}

public static synchronized Department getHRInstance() {
    if (null == hr) {
        hr = new Department();
    }
    return hr;
}

из остальной части вашего кода вы можете вызвать Department.getHRDepartment() и аналогично для административного отдела, который просто отображает вторую статическую переменную.(Для более чем 2 синглетов вам может потребоваться использовать карту для хранения экземпляров или использовать класс Enum для определения синглетонов.)

Единственный экземпляр имеет недостаток, заключающийся в том, что внедрение зависимостей трудно осуществить.затрудняет или делает невозможным создание тестов JUnit.Для большинства используемых одноэлементных шаблонов на самом деле лучше инициализировать «одноэлементные» экземпляры при инициализации приложения и передавать их классам, использующим их, передавая их через конструктор или создавая фабрику объектов, которая передает ссылки на одноэлементные файлы после создания своего объекта.экземпляры.

1 голос
/ 13 августа 2010

Вам нужен синглтон. Есть несколько способов его реализовать, и это наиболее широко известное решение, опубликованное rsp. Хорошая уловка - иметь перечисление только с одним значением.

1 голос
/ 13 августа 2010

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

Посмотрите учебник по перечислению: http://download.oracle.com/javase/tutorial/java/javaOO/enum.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...