user not logged
← Previous page Next page →

Шаблон "Одиночка"

Design Patterns
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, пользователь получит ошибку на этапе компиляции. Если же нам все же необходим один и только один экземпляр класса(только статическими методами не обойтись), мы можем реализовать статический метод, который создает и возвращает этот единственный экземпляр, проверяя состояние статической переменной-флага. Такой подход позволит избежать необходимости возбуждать и обрабатывать исключения.

Основные свойства шаблона:

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

Add new comment

Your name:
*Email:
Homepage:
Subject:
*Comment:
 
* denotes required field
← Previous page Next page →

Where am I?

This is an individual post page where its content and comments are located.

Powered by: Motoko Blog System 0.9.5 beta | Used theme: Proximity One
Page generation time: 0.17 s | SQL requests number: 7 | Timestamp: 05:10:11, 23-02-2012
May the force be with you