Структурні патерни проектування: Фасад, Легковага та Проксі

Структурні патерни проектування допомагають організувати класи та об'єкти.

Сьогодні ми розглянемо останні три патерни, щоб завершити ваш набір інструментів.

1. Патерн Фасад (Facade) Фасад спрощує складні системи. Він надає один простий інтерфейс для групи заплутаних класів.

Уявіть кінотеатр. Щоб подивитися фільм, потрібно приглушити світло, запустити проектор і відкрити штори. Замість того, щоб викликати п'ять різних систем, ви викликаєте один метод: theater.watch_movie().

Використовуйте його, коли:

  • Ви хочете спростити складну підсистему.
  • Вам потрібна єдина точка входу для великого API.
  • Ви хочете відокремити клієнтів від внутрішньої логіки.

2. Патерн Легковага (Flyweight) Легковага економить пам'ять. Вона працює, коли у вас є тисячі схожих об'єктів.

Замість того, щоб зберігати кожну деталь у кожному об'єкті, ви розділяєте дані. Ви зберігаєте спільні, незмінні дані (внутрішній стан) в одному місці. Унікальні дані (зовнішній стан) ви зберігаєте окремо.

Використовуйте його, коли:

  • Використання пам'яті є реальною проблемою.
  • Ви керуєте мільйонами схожих об'єктів, як-от символи в текстовому редакторі або частинки в грі.
  • Ви хочете використовувати пул об'єктів (object pooling) для підвищення продуктивності.

3. Патерн Проксі (Proxy) Проксі виступає як замінник іншого об'єкта. Він знаходиться між клієнтом і реальним об'єктом для контролю доступу.

Проксі може:

  • Виконувати ліниве завантаження (Lazy load): завантажувати важкі зображення лише тоді, коли користувач натискає на них.
  • Контролювати доступ: перевіряти, чи має користувач дозвіл на видалення бази даних.
  • Логувати дії: відстежувати, хто використовує певний сервіс.
  • Кешувати результати: повертати збережені дані замість виконання ресурсомісткої логіки.

Використовуйте його, коли:

  • Вам потрібно відкласти виконання ресурсомістких операцій.
  • Вам потрібно захистити конфіденційний сервіс.
  • Ви хочете додати логування або безпеку, не змінюючи оригінальний клас.

Підсумкова таблиця

Адаптер: змушує несумісні системи працювати разом. • Міст: відокремлює абстракцію від реалізації. • Композіт: будує древоподібні структури. • Декоратор: додає поведінку без зміни класів. • Фасад: спрощує складні підсистеми. • Легковага: розділяє дані для економії пам'яті. • Проксі: контролює доступ до об'єктів.

Золоте правило: використовуйте ці патерни, щоб зробити код підтримуваним. Не використовуйте їх лише для того, щоб похизуватися.

Далі ми розпочнемо серію патернів поведінкового проектування (Behavioral Design Patterns).

Source: https://dev.to/mahdi0shamlou/mahdi-shamlou-structural-design-patterns-2026-facade-flyweight-proxy-production-examples-g5l