Урок 5. Одиночка (Singleton)
Тема: Паттерн проектирования "Одиночка" (Singleton)
Введение
Паттерн "Одиночка" (Singleton) — это порождающий паттерн проектирования, который гарантирует, что класс имеет только один экземпляр и предоставляет глобальную точку доступа к этому экземпляру. Этот паттерн часто используется для управления доступом к ресурсам, таким как базы данных, файловые системы или конфигурационные данные, где необходимо обеспечить единую точку управления.
Основные концепции
- Единый экземпляр:
-
Класс, реализующий паттерн "Одиночка", создает единственный экземпляр самого себя и предоставляет метод для его получения.
-
Глобальная точка доступа:
-
Паттерн обеспечивает глобальную точку доступа к единственному экземпляру, что позволяет другим классам взаимодействовать с ним.
-
Ленивая инициализация:
- Экземпляр создается только при первом обращении к нему, что позволяет экономить ресурсы.
Преимущества использования паттерна "Одиночка"
- Контроль доступа: Обеспечивает контроль доступа к единственному экземпляру класса.
- Упрощение кода: Упрощает управление состоянием приложения, так как все компоненты могут обращаться к одному и тому же экземпляру.
- Глобальная доступность: Позволяет легко получить доступ к экземпляру из любого места в коде.
Пример использования
Рассмотрим пример, где мы создаем класс Configuration
, который хранит настройки приложения. Мы реализуем паттерн "Одиночка" для обеспечения единственного экземпляра этого класса.
// Одиночка
class Configuration {
private static Configuration instance;
private String setting;
// Приватный конструктор
private Configuration() {
// Инициализация настроек
setting = "Default Setting";
}
// Метод для получения единственного экземпляра
public static Configuration getInstance() {
if (instance == null) {
instance = new Configuration();
}
return instance;
}
public String getSetting() {
return setting;
}
public void setSetting(String setting) {
this.setting = setting;
}
}
// Использование одиночки
public class Main {
public static void main(String[] args) {
// Получение единственного экземпляра конфигурации
Configuration config = Configuration.getInstance();
System.out.println("Initial Setting: " + config.getSetting());
// Изменение настройки
config.setSetting("New Setting");
System.out.println("Updated Setting: " + config.getSetting());
// Получение другого экземпляра конфигурации
Configuration anotherConfig = Configuration.getInstance();
System.out.println("Another Config Setting: " + anotherConfig.getSetting());
}
}
Заключение
Паттерн "Одиночка" является мощным инструментом для управления доступом к единственному экземпляру класса. Он позволяет разработчикам контролировать создание объектов и обеспечивает глобальную точку доступа к ним. Использование этого паттерна способствует улучшению структуры кода и облегчает его поддержку, особенно в системах, где необходимо управлять состоянием или ресурсами.
пример
https://gitlab.com/synergy9980417/razdel2/7_5