воскресенье, 7 апреля 2013 г.

Паттерн проектирования: Singleton / Одиночка



Тип паттерна: порождающий

Один из самых легких и полезных паттернов является синглтон. С него можно начинать изучать паттерны проектирования сразу после изучения основ ООП.

Его поведение крайне простое: не допустить существование в программе двух объектов одного класса. Для класса, реализующего синглтон, может существовать только один объект. И класс предоставляет глобальную точку доступа к нему.

Глобальный объект, конечно, усложняет масштабирование системы. И это минус. Но для небольших приложений вполне применим.

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

В чем принцип работы?
Во-первых скрываются конструкторы класса модификатором private.
Во-вторых у класса добавляется статическое поле - экземпляр класса, недоступное извне (private).
В-третьих добавляется статический метод возвращающий этот экземпляр getInstance()

Пример простого синглтона:

public class Singleton { private static Singleton instance; private Singleton (){ } public static Singleton getInstance(){ if (instance == null){ instance = new Singleton(); } return instance; } }

К сожалению, здесь нет учета работы в многопоточной среде. Поэтому, чтобы не возникло гонки, можно реализовать синглтон так:

public class Singleton { private static Singleton instance; private Singleton (){ } public static Singleton getInstance(){ synchronized (this){ if (instance == null){ instance = new Singleton(); } } return instance; } }
Или даже так:

public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){ } public static Singleton getInstance(){ return instance; } }

Комментариев нет:

Отправить комментарий