Сінглтон (Singleton) в програмуванні — це шаблон проєктування, який обмежує створення екземпляра класу до одного єдиного екземпляра та забезпечує глобальний доступ до цього екземпляра. У Ruby сінглтон-клас можна створити за допомогою модуля та методу singleton_class
. В основі сінглтон-класу лежить ідея, що для певного об’єкта можна створити унікальний клас, який має лише один екземпляр.
Ось приклад використання сінглтон-класу в Ruby:
require 'singleton'
class SingletonClassExample
include Singleton
attr_accessor :data
def initialize
@data = "This is the singleton instance"
end
end
# Спроба створення нового екземпляра викличе помилку
# singleton_instance = SingletonClassExample.new
# Помилка: private method `new' called
# for SingletonClassExample:Class (NoMethodError)
# Отримання єдиного екземпляра
singleton_instance = SingletonClassExample.instance
# Використання єдиного екземпляра
puts singleton_instance.data # Виведе "This is the singleton instance"
# Зміна даних в єдиному екземплярі
singleton_instance.data = "Updated data"
# Використання змінених даних
puts singleton_instance.data # Виведе "Updated data"
У цьому прикладі SingletonClassExample
є сінглтон-класом, і ми використовуємо модуль Singleton
для забезпечення того, що може існувати тільки один екземпляр цього класу. Зверніть увагу, що конструктор initialize
викликається лише при першому створенні екземпляра, а всі подальші спроби створити новий екземпляр викличуть помилку.
Синглтон використовується тоді, коли потрібно мати лише один екземпляр певного класу в системі, і цей екземпляр має глобальний доступ. Ось деякі типові сценарії, де він використовується:
-
Менеджер налаштувань (Configuration Manager): Синглтон може бути використаний для зберігання налаштувань або конфігурацій, які використовуються в різних частинах програми. Це дозволяє забезпечити єдиний збережений екземпляр конфігурації, до якого можна отримати доступ з будь-якої частини програми.
-
Менеджер з’єднань до бази даних. Якщо програма взаємодіє з базою даних, сінглтон може використовуватися для створення та управління єдиним об’єктом для з’єднання з базою даних. Це забезпечує ефективне використання ресурсів та гарантує, що у всіх частинах програми використовується той самий об’єкт з’єднання.
-
Кешування даних. Сінглтон може використовуватися як кеш для зберігання часто використовуваних даних, наприклад, об’єктів, які важко обчислити або отримати. Це дозволяє зменшити накладні витрати ресурсів на повторне обчислення або отримання даних.
-
Логгери (журналізатори). Сінглтон може використовуватися для створення єдиного об’єкта-логгера, який обробляє всі записи журналу у програмі.
-
Менеджер ресурсів. Якщо вам потрібно управляти обмеженими ресурсами (наприклад, пулом підключень), сінглтон може служити як менеджер, який розподіляє та вивільняє ресурси за запитами з інших частин програми.
Загалом, сінглтон використовується там, де потрібно гарантувати, що клас має тільки один екземпляр, і цей екземпляр може бути доступний з будь-якої частини програми.