|
|||||
| Author: | Анатолий Тутов | Timestamp:27 / 10 / 2006 @ 18:54:00 | |||
| Tags: | creational patterns, object-oriented design, programming | ||||
Одиночка (The Singleton pattern) Этот шаблон применяется в тех случаях, когда нужно достоверно знать, что существует один и только один экземпляр класса. Например, если ваша система может иметь только один диспетчер окон или только одну точку доступа к БД. Проще всего реализовать такой шаблон в Java, для этого надо объявить внутри класса статическую переменную и проверять ее значение каждый раз при запуске конструктора. Так как статическая переменная одна для всех экземпляров класса, то первый запуск конструктора может установить определенное ее значение, а последующие, обнаружив это значение переменной-флага, не позволят создать другие экземпляры класса. В этом случае возникает одна проблема: как определить был ли успешным запуск конструктора, если конструктор не возвращает значений? Есть два стандартных пути. Простой создать функцию, которая будет возвращать некое значение в зависимости от результатов исполнения конструктора. Правильный создать класс исключения, которое должно возбуждаться в случае, если конструктор объекта класса запущен не впервые. Среди стандартных библиотек Java есть пример реализации шаблона Одиночка. Это класс Math. Этот класс объявлен как final и все его методы объявлены статическими. Это означает, что от Math нельзя унаследовать другой класс. Такой же подход можно применить и для реализации шаблона Одиночка. Создав завершенный(final) класс имеющий только статические методы, мы вынуждаем пользователя вызывать эти методы, так как наследование завершенных классов невозможно. В то же время, объявив конструктор класса частным(private), мы исключим возможность динамического создания объекта такого класса. При попытке вызвать конструктор, для которого указан модификатор private, пользователь получит ошибку на этапе компиляции. Если же нам все же необходим один и только один экземпляр класса(только статическими методами не обойтись), мы можем реализовать статический метод, который создает и возвращает этот единственный экземпляр, проверяя состояние статической переменной-флага.
Такой подход позволит избежать необходимости возбуждать и обрабатывать исключения.
|
|||||
| Leave the first comment | |||||