Зміст
На рев'ю два розробники сперечаються про один клас. Один каже: «тут потрібен Decorator». Інший: «це просто if». Через місяць — три шари обгорток, які ніхто не може прочитати, і баг у порядку викликів. Знайомо?
Design Patterns (GoF, 1994) — не інструкція «встав шаблон у кожен модуль». Це словник для повторюваних проблем проєктування. Нижче — розбір своїми словами: що з книги живе в 2026 році, де стає карго-культом, і як ШІ посилює «pattern soup». Вижимка не замінює оригінал.
Теза книги
Шаблон проєктування — іменоване, перевірене рішення повторюваної проблеми в ООП-системах. GoF дає мову: Strategy, Observer, Factory Method — посилання на структуру та компроміси, не модні слова.
Класична помилка — зубрити 23 шаблони списком. Правильніше — впізнати ситуацію і згадати ім'я ходу.
Ключові ідеї
Шаблон — словник команди, не KPI
Що каже автор. Патерн фіксує проблему, контекст, рішення, наслідки. «Facade» або «Adapter» на рев'ю економить час.
Enterprise. Інтеграція з банком — Adapter з вузьким інтерфейсом замість «обгортка над обгорткою».
Як змінюється з ШІ. Модель генерує AbstractFactory там, де вистачило функції. Просіть: спочатку проблема, потім одне ім'я з GoF, якщо справді потрібно.
Мій досвід. GoF рятує в розмовах між командами. Коли патерн стає метою — книга заважає.
Одна думка: спочатку проблема, потім ім'я з каталогу.
Програмуй на інтерфейс, а не на реалізацію
Залежність від абстракції знижує зв'язність. Notifier замість конкретного SMS-шлюзу — класичний приклад.
ШІ. Інтерфейс на кожен клас — зоопарк. Критерій: дві реалізації або реальна підміна?
Одна думка: інтерфейс там, де завтра буде друга реалізація.
Композиція краща за успадкування
Decorator, Strategy, Bridge — про гнучкість через делегування. Глибокі ієрархії extends — кандидат на рефакторинг.
Посилання: рефactoring Фаулера.
Creational: гнучке створення
Builder, Factory — про варіанти створення. Singleton — червоний прапор у новому коді без вагомої причини.
Behavioral: Strategy і Observer
Strategy замість великого switch. Observer — події, reactive streams; ідея «підписники не знають один одного» лишається.
Structural: Adapter і Facade на межах
Adapter для чужого API. Facade звужує surface, не пробрасывает усе підряд.
На практиці
На рев'ю: проблема до імені патерну? Простіше рішення без нового шару? Hooks і middleware — ті самі ідеї, інший синтаксис.
| Ідея | Junior | Middle | Senior |
|---|---|---|---|
| Патерн як словник | ★★★★ | ★★★★★ | ★★★★★ |
| Інтерфейс vs реалізація | ★★★★★ | ★★★★★ | ★★★★ |
| Композиція vs успадкування | ★★★★ | ★★★★★ | ★★★★★ |
| Creational | ★★★★ | ★★★★★ | ★★★★ |
| Behavioral | ★★★★ | ★★★★★ | ★★★★★ |
| Structural | ★★★★ | ★★★★★ | ★★★★★ |
Обмеження та критика
GoF старіє в прикладах, не в проблемах. Pattern-omania гірша за відсутність каталогу. Порівняння: «Чистий код», Refactoring, DDD.
Читайте GoF як довідник і мову, не 23 галочки в Jira.
Кому читати
Варто — нетривіальні модулі, інтеграції, legacy з Factory/Observer. Вибірково — якщо фреймворк дає все з коробки.
Що зробити сьогодні
- Назвіть одну проблему в поточному модулі — один патерн GoF чи простий рефactoring?
- Знайдіть один switch за типом — Strategy лише якщо варіантів стане більше.
- На рев'ю ШІ-дифа — без нових ієрархій без пояснення проблеми.
- Прочитайте одну главу оригіналу (Strategy або Adapter).

