Зміст дописунатисність на посилання, щоб перейти до потрібного місця
Патерн (pattern) проєктування (або шаблон проєктування) - це загальний спосіб вирішення типових проблем при розробці програмного забезпечення. Використання патернів проєктування дозволяє розробникам використовувати передбачувані та ефективні рішення для конкретних завдань. Розглянемо приклади популярних патернів проєктування нижче.
Singleton
Singleton є одним з патернів проєктування, і його основна ідея полягає в тому, щоб клас мав тільки один екземпляр, і надає глобальну точку доступу до цього екземпляра. Це корисно, коли точно один об'єкт повинен координувати дії багатьох інших об'єктів.
class Singleton # Змінна для зберігання єдиного екземпляра @instance = nil # Приватний конструктор, щоб заборонити створення екземплярів ззовні класу private_class_method def initialize # Ініціалізація екземпляру end # Глобальна точка доступу до єдиного екземпляра def self.instance @instance ||= new end end
Для чого може бути потрібен сінглтон клас?
Клас конфігураціїЯкщо у вас є клас, який зберігає конфігураційні налаштування для вашого додатку, використання сінглтону дозволяє забезпечити глобальний доступ до цього класу конфігурації. Таким чином, усі частини програми можуть легко отримувати доступ до одного екземпляра для отримання конфігурацій.
Менеджер підключень до бази данихУ великих програмах може бути потрібно керувати підключеннями до бази даних. Сінглтон може використовуватися для створення і управління пулом з'єднань до бази даних, забезпечуючи централізований доступ до цих ресурсів.
ЛоггерКлас, що веде журнал подій або відстежує інформацію про помилки, може бути реалізований як сінглтон. Це дозволяє всім компонентам додатку легко реєструвати події та помилки у єдиний лог-файл чи іншу систему.
Менеджер ресурсів:Якщо ваша програма працює з обмеженими ресурсами (наприклад, з пулом з'єднань до API), сінглтон може бути використаний для керування доступом та використанням цих ресурсів.
Кеш:Сінглтон може бути використаний для реалізації механізму кешування даних. У цьому випадку, він зберігає кешовані дані та надає зручний спосіб для отримання чи оновлення цих даних.
Та для інших специфічних потреб...
Фабричний метод (Factory Method)
Фабричний метод (Factory Method) - це породжуючий патерн проєктування, який надає інтерфейс для створення об'єктів у суперкласі, але дозволяє підкласам змінювати тип створюваних об'єктів.
Основна ідея полягає в тому, щоб визначити інтерфейс для створення об'єкта, але залишити саме створення об'єкта підкласам, залежно від контексту чи умов використання.
Основні елементи у патерні:
- Продукт (Product) - інтерфейс або абстрактний клас, який визначає об'єкт, який буде створюватися фабричним методом.
- Конкретний продукт (Concrete Product) - конкретна реалізація об'єкта, який створюється фабричним методом.
- Творець (Creator): Це абстрактний клас або інтерфейс, який визначає фабричний метод. Зазвичай містить інші методи для роботи зі створеним об'єктом.
- Конкретний творець (Concrete Creator): Реалізація творця, яка конкретно реалізує фабричний метод для створення конкретного продукту.
Приклад фабричного методу може бути, наприклад, в графічному редакторі. Спробуймо представити ситуацію, де є клас Document і його підкласи TextDocument та ImageDocument. Ми можемо визначити фабричний метод у класі DocumentCreator, який буде містити логіку створення конкретних продуктів (TextDocument чи ImageDocument). Кожен конкретний творець реалізує фабричний метод відповідно до своїх потреб.
# Продукт class Document def display raise NotImplementedError, "Subclasses must implement the display method." end end # Конкретний продукт class TextDocument < Document def display puts "Displaying text document." end end # Конкретний продукт class ImageDocument < Document def display puts "Displaying image document." end end # Творець class DocumentCreator def create_document raise NotImplementedError, "Subclasses must implement the create_document method." end end # Конкретний творець class TextDocumentCreator < DocumentCreator def create_document TextDocument.new end end # Конкретний творець class ImageDocumentCreator < DocumentCreator def create_document ImageDocument.new end end # Використання фабричного методу text_creator = TextDocumentCreator.new text_document = text_creator.create_document text_document.display image_creator = ImageDocumentCreator.new image_document = image_creator.create_document image_document.display
У цьому прикладі DocumentCreator є абстрактним творцем, а TextDocumentCreator та ImageDocumentCreator є конкретними творцями. Кожен конкретний творець реалізує фабричний метод create_document для створення відповідного продукту (TextDocument або ImageDocument).