Skip to content

Урок 5. Одиночка (Singleton)

Тема: Паттерн проектирования "Одиночка" (Singleton)

Введение

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

Основные концепции

  1. Единый экземпляр:
  2. Класс, реализующий паттерн "Одиночка", создает единственный экземпляр самого себя и предоставляет метод для его получения.

  3. Глобальная точка доступа:

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

  5. Ленивая инициализация:

  6. Экземпляр создается только при первом обращении к нему, что позволяет экономить ресурсы.

Преимущества использования паттерна "Одиночка"

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

Пример использования

Рассмотрим пример, где мы создаем класс 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