Singleton: паттерн проектирования для создания уникального экземпляра класса
Синглтон – это паттерн проектирования, который используется для создания класса, у которого может быть только один экземпляр. Он предоставляет доступ к этому экземпляру через глобальную точку доступа.
Существует множество ситуаций, когда мы хотим, чтобы у класса было только одно экземпляр, например, когда нам нужно обеспечить глобальный доступ к ресурсам (например, базе данных) или когда нам нужно обеспечить, чтобы класс был состоянием, общим для всего приложения.
Для реализации синглтона мы можем использовать статическую переменную и статический метод в классе. При первом вызове метода, который получает экземпляр синглтона, он проверяет, существует ли уже экземпляр класса. Если экземпляр еще не создан, он создается. Во всех последующих вызовах метода будем возвращать уже созданный экземпляр синглтона.
public class Singleton {
private static Singleton instance;
private Singleton() {
// приватный конструктор, чтобы предотвратить создание экземпляров класса вне класса
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
public void showMessage() {
System.out.println("Привет, я синглтон!");
}
}
В данном примере у класса Singleton есть приватная статическая переменная instance, которая хранит единственный экземпляр класса. Публичный статический метод getInstance() проверяет, существует ли экземпляр. Если экземпляр еще не создан, создается новый экземпляр. Метод showMessage() просто выводит сообщение на консоль.
Давайте рассмотрим пример использования синглтона:
public class Main {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
singleton.showMessage();
}
}
В данном примере мы получаем экземпляр синглтона с помощью метода getInstance() и вызываем метод showMessage() у этого экземпляра. Результат выполнения программы будет:
Привет, я синглтон!
Таким образом, паттерн синглтон обеспечивает, что у класса есть только один экземпляр, который можно получить через глобальную точку доступа. Это полезно во многих случаях, когда мы хотим обеспечить уникальность экземпляра класса и глобальный доступ к нему.