GOF patterns - makstron/info GitHub Wiki
GOF
Шаблони проєктування програмного забезпечення — ефектні способи вирішення задач проєктування програмного забезпечення. Шаблон не є закінченим зразком, який можна безпосередньо транслювати в програмний код. Об'єктно-орієнтований шаблон найчастіше є зразком вирішення проблеми і відображає відношення між класами та об'єктами, без вказівки на те, як буде зрештою реалізоване це відношення.
Generating (Твірні)
Породжуючі шаблони — це шаблони проєктування, що абстрагують процес побудови об'єктів. Вони допоможуть зробити систему незалежною від способу створення, композиції та представлення її об'єктів.
- Абстрактна фабрика (Abstract Factory)
- Будівельник (Builder)
- Впровадження залежностей (Dependency Injection)
- Одинак (Singleton)
- Прототип (Prototype)
- Фабричний метод (Factory Method)
- Отримання ресурсу є ініціалізація (Resource Acquisition Is Initialization)
- Відкладена ініціалізація (Lazy initialization)
- Пул об'єктів (Object pool)
- Мультитон (Multiton pattern)
Structural (Структурні)
Структурні шаблони — шаблони проєктування, у яких розглядається питання про те, як із класів та об'єктів утворюються більші за розмірами структури.
- Адаптер (Adapter)
- Декоратор (Decorator)
- Замісник (Proxy)
- Компонувальник (Composite)
- Міст (Bridge)
- Легковаговик (Flyweight)
- Фасад (Facade)
- Модуль
Behavioral (Поведінки)
Шаблони поведінки — шаблони проєктування, що пов'язані з алгоритмами та розподілом обов'язків поміж об'єктів. Мова в них йде не тільки про самі об'єкти та класи, але й про типові способи їхньої взаємодії. Шаблони поведінки характеризують складний потік керування, котрий досить важко прослідкувати під час виконання програми. Увага акцентована не на потоці керування, а на зв'язках між об'єктами.
- Відвідувач (Visitor)
- Інтерпретатор (Interpreter)
- Ітератор (Iterator)
- Команда (Command)
- Ланцюг обов'язків (Chain of Responsibility)
- Посередник (Mediator)
- Точка входу (Front controller)
- Спостерігач (Observer)
- Стан (State)
- Стратегія (Strategy)
- Знімок (Memento)
- Шаблонний метод (Template Method)
Creational patterns (Породжувальні патерни)
Abstract Factory
Породжувальний патерн проектування, що дає змогу створювати сімейства пов’язаних об’єктів, не прив’язуючись до конкретних класів створюваних об’єктів.
Застосування
- Коли бізнес-логіка програми повинна працювати з різними видами пов’язаних один з одним продуктів, незалежно від конкретних класів продуктів.
- Коли в програмі вже використовується Фабричний метод, але чергові зміни передбачають введення нових типів продуктів.
- Вхідні до родини взаємозв'язані об'єкти повинні використовуватися разом і необхідно забезпечити виконання цього обмеження
Factory Method
Породжувальний патерн проектування, який визначає загальний інтерфейс для створення об’єктів у суперкласі, дозволяючи підкласам змінювати тип створюваних об’єктів.
Застосування
- Класу не відомо заздалегідь, об'єкти яких саме класів йому потрібно створювати
- Коли ви хочете надати користувачам можливість розширювати частини вашого фреймворку чи бібліотеки
Singleton
Гарантує, що клас матиме тільки один екземпляр, і забезпечує глобальну точку доступу до цього екземпляра
Застосування
- Коли в програмі повинен бути єдиний екземпляр якого-небудь класу, доступний усім клієнтам (наприклад, спільний доступ до бази даних з різних частин програми)
- єдиний екземпляр повинен розширюватись шляхом успадкування, та клієнтам потрібно мати можливість працювати з розширеним екземпляром не змінюючи свій код
Builder
Породжувальний патерн проектування, що дає змогу створювати складні об’єкти крок за кроком. Будівельник дає можливість використовувати один і той самий код будівництва для отримання різних відображень об’єктів. На відміну від шаблону абстрактної фабрики і фабричного методу, ціль яких є застосування поліморфізму, задачею шаблону будівельника є забезпечення реалізації анти-шаблону телескопічного (багатоступеневого) конструювання. Анти-шаблон «телескопічний конструктор» коли різна комбінація параметрів конструктора призводить до появи експоненційної множини конструкторів. Замість того, щоб використовувати набір конструкторів, використовують шаблон будівельник, згідно якого використовують інший об'єкт (будівельник), що отримує на вхід вхідні параметри по одному, крок за кроком, і повертає за один прохід результуючий створений об'єкт.
Застосування
- алгоритм створення складного об'єкта не повинен залежати від того, з яких частин складається об'єкт та як вони стикуються поміж собою
- процес конструювання повинен забезпечити різні подання об'єкта, що конструюється
Prototype
Твірний шаблон проєктування, який дозволяє створювати копії існуючих об'єктів таким чином, що програмний код не залежить від їх класів.
Застосування
- Коли ваш код не повинен залежати від класів об’єктів, призначених для копіювання
- екземпляри класу можуть знаходитись у одному з не дуже великої кількості станів. Може статися, що зручніше встановити відповідну кількість прототипів та клонувати їх, а не інстанціювати щоразу клас вручну в слушному стані