Определение: Основная функция синглтонского шаблона состоит в том, чтобы гарантировать, что в Java -приложениях существует только один экземпляр класса.
Во многих операциях, таких как установление подключения к базе данных каталогов, требуется такая однопоточная операция.
Кроме того, Singleton может быть государством; Классы Singleton могут сохранить этот счет и автоматически увеличивать 1, безопасно синхронизируя.
Кроме того, Singleton также может быть без сохранения состояния. Предоставляет инструментальные функции,
Модель Singleton предоставляет нам возможность реализации таким образом. Преимущество использования Singleton заключается в том, что он может сохранить память, потому что он ограничивает количество экземпляров и способствует сбору мусора Java.
Мы часто видим, что загрузчики классов также реализуются в режиме Синглтона в заводском режиме, потому что загруженный класс фактически принадлежит ресурсам.
Как использовать синглтонский режим
Общий шаблон Синглтона обычно имеет несколько форм:
Кода -копия выглядит следующим образом:
открытый класс Singleton {
private singleton () {}
// Разве это не странно определить экземпляр себя внутри себя?
// Обратите внимание, что это закрыто только для внутренних вызовов
Частный статический экземпляр Singleton = new Singleton ();
// Вот статический метод для внешнего доступа к этому классу, к которому можно получить доступ напрямую
Public Static Singleton GetInstance () {
вернуть экземпляр;
}
}
Вторая форма:
Кода -копия выглядит следующим образом:
открытый класс Singleton {
Частный статический экземпляр синглтона = null;
публичный статический синхронизированный Singleton GetInstance () {
// Этот метод улучшается по сравнению с вышеизложенным.
// Создавать экземпляры во время использования, повышение эффективности!
if (экземпляр == null)
encess = new Singleton ();
вернуть экземпляр;
}
}
Singleton.getinstance () может использоваться для доступа к классам Singleton.
Вторая форма выше - это ленивая инициализация, что означает, что первоначальный синглтон вызывает впервые, и в будущем нет необходимости.
Обратите внимание, что синхронизирован в форме ленивого инициализации важен. Есть много дискуссий о ленивой инициализации о блокировке с двумя проверенными (DCL), и интересы в ней будут изучать ее.
Обычно считается, что первая форма безопасна.
Что следует отметить при использовании режима Singleton
Иногда в некоторых случаях использование Синглтона не может достичь цели Синглтона. -Сервер и кросс-jvm.
Давайте возьмем пример ServiceLocator исходного кода Sun's Pet Store (Pet Store 1.3.1) и кратко проанализируем его:
В домашнем магазине есть два типа ServiceLocator, один находится в каталоге EJB, а другой находится в веб -каталоге. Службы позиционирования, но зачем их отделить? После тщательного изучения этих двух ServiceLocator я обнаружил разницу: ServiceLocator принимает режим Singleton в веб -режиме, ServiceLocator принадлежит к позиционированию ресурсов, поэтому, конечно, следует использовать режим синглтона. Однако в EJB модель Singleton потеряла свою функцию, поэтому ServiceLocator делится на два типа, один предназначен для веб -служб, а другой - для услуг EJB.
Определенная шаблон выглядит просто и очень удобен в использовании, но очень сложно использовать его.