← Повернутись до блогу

Патерни проектування

January 2026 2 хвилини на читання 168 переглядів

Ну привіт!

Настав і мій час завести книжку статтю про патерни проектування. Зачєм? Бо треба щоб самому структурувати те що я вже давно знаю і використовую, але в назвах, що називається, плаваю. Та і загалом, треба жити інтєрєсно: читати книжки, бути шпіоном, дресірувать любіму обізяну і ходить в оперу з красівими тьолками, получать удовольствіє.

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

Патерни чи шаблони?

Мені не подобається як слово pattern переклали українською. Я обидва слова розумію по різному, і мені ближче слово pattern.

Pattern - reusable solution. Шаблон - зразок, взятий для наслідування.

Що таке патерн

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

Пара прикладів не повʼязаних з програмуванням

Ось наприклад, ви чистите цибулю. Все життя ви розрізаєте цибулину навпіл і знімаєте шари з кожної половини. Це патерн. Кожна почищена цибулина це реалізація патерна.

Або інший приклад: ви з другом сидите в барі. Ваш друг бачить гарного мужчину за барною стійкою, і ви розказуєте другу що зробити для того, щоб той гарний мужчіна наступного ранку пив каву вдома у друга. Оце все що ви розказали це патерн. Якщо воно ще й спрацює, це корисний патерн. Реалізація вашого плану другом - це реалізація патерна. (Я хотів без сексізму)

Якщо серйозно, мені більше подобається перекладати pattern як “мотив” (той що в музиці або в мистецтві або моді). Мотиви програмування, звучить? 😅

А що не є патерном

Патерн ≠ код. Патерн – це ідея, яка живе поза кодом. Інакше кажучи: патерн можна розповісти на папері без жодного рядка коду, і розробник зрозуміє що робити.

Які патерни бувають

Прийнято розділяти патерни на три групи: породжуючі, структурні, поведінкові.

Породжуючі

Беруть на себе забовʼязання щодо створення нових обʼєктів в коді.

Породжуючі патерни контролюють народження об’єктів. Без них: new User(), new User(), new User() по всьому коду - хаос. З ними: одне місце знає як створювати користувачів, решта коду просто просить “дай мені користувача”.

  1. Singleton
  2. Factory Method
  3. Abstract Factory
  4. Builder
  5. Object Pool
  6. Lazy Initialization

Структурні

Беруть відповідальність за взаємодію між обʼєктами. Обʼєкти типу А можуть повертати обʼєкти типу Б, і оця вся мішанина якраз тут. Уявіть як ви хочете описати дитину вашої племіниці (ви → брат/сестра → племінниця → її дитина). Структурні патерни описують саме такі ієрархії та відносини між об’єктами.

  1. Адаптер
  2. Bridge
  3. Composite
  4. Decorator
  5. Facade
  6. Flyweight
  7. Private Class Data
  8. Module

Поведінкові

Відповідають за комунікацію та розподіл обов’язків між об’єктами. Описують, як об’єкти взаємодіють і передають повідомлення один одному. Знову до сімʼї: будильник дзвенить → батько прокидається → будить маму → мама будить дітей → діти йдуть снідати. Кожен реагує на дію попереднього.

  1. Chain of Responsibility
  2. Command
  3. Iterator
  4. Mediator
  5. Memento
  6. Observer
  7. State
  8. Стратегія
  9. Template Method
  10. Visitor
  11. Interpreter
  12. Null Object
  13. Specification
2018–2025 (c) Списуй але не один в один