Одноэлементный шаблон — один из самых простых шаблонов проектирования. Класс, использующий шаблон проектирования singleton, имеет единственный экземпляр, которым он управляет сам по себе. Этот класс не позволяет любому другому классу создать его экземпляр.

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

Превосходная поддержка объектно-ориентированного программирования в Java упрощает использование шаблона проектирования singleton.

Реализация шаблона Singleton с использованием Java

Есть много способов реализовать одноэлементный шаблон в Java; нетерпеливый и ленивый подходы являются общими вариациями. Каждый из этих подходов имеет свои достоинства и недостатки. Следовательно, метод, который вы выберете, должен зависеть от того, как будет работать ваше приложение.

Нетерпеливый подход

Реализация одноэлементного шаблона с нетерпеливым подходом означает, что класс создает новый экземпляр самого себя при загрузке.

instagram viewer

публичныйсортEagerSingleton{
частныйстатический Экземпляр EagerSingleton = новый Нетерпеливый Одиночка();

частныйEagerSingleton(){}

публичныйстатический EagerSingleton получить экземпляр(){
возвращаться пример;
}
}

EagerSingletonJava-класс создает новый экземпляр самого себя по мере загрузки. Он назначает этот экземпляр частному статическому переменная экземпляра, который доступен только внутри класса singleton. Единственная точка внешнего доступа к переменной экземпляра — через получить экземпляр () метод. Этот метод возвращает ранее созданный экземпляр класса.

Этот подход хорош тем, что предотвращает многопоточность проблема, которая является одной из самых больших проблем шаблона singleton. Он решает проблему многопоточности, создавая новый экземпляр самого себя до того, как какой-либо новый поток сможет получить доступ к его переменной экземпляра. Это гарантирует, что каждый поток будет иметь доступ только к одному и тому же экземпляру.

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

Ленивый подход

Ленивый подход — это решение проблемы нетерпеливого подхода. Это позволяет вам создавать новый экземпляр одноэлементного класса только тогда, когда это необходимо вашей программе.

публичныйсортЛенивый Синглтон{
частныйизменчивыйстатический экземпляр LazySingleton;

частныйЛенивый Синглтон(){}

публичныйстатический Ленивый Синглтон получить экземпляр(){
если (экземпляр == нулевой) {
синхронизированный (Ленивый Синглтон.сорт) {
если (экземпляр == нулевой) {
экземпляр = новый Ленивый Синглтон();
}
}
}

возвращаться пример;
}
}

Ленивый подход решает проблему многопоточности, используя синхронизированный ключевое слово. Это предотвращает одновременный доступ двух потоков к переменной экземпляра. Однако синхронизация стоит дорого, поэтому приложение использует ее только один раз, при первом вызове getInstance().

Когда использовать шаблон Singleton

Шаблон Singleton полезен во многих сценариях для создания диалоговых окон, обработки параметров реестра или управления пулами потоков.

Еще одно распространенное использование шаблона singleton — создание центрального класса, управляющего соединениями с базой данных.