Шаблони проектування

Шаблони проектування — це спосіб вирішення проблем, що періодично виникають. Точніше, це посібники з вирішення конкретних проблем. Це не класи, пакети або бібліотеки, які ви можете вставити у свій додаток і чекати на чари.
Поведінкові шаблони проектування

Шаблонний метод

Аналогія Допустимо, ви зібралися будувати будинки. Етапи будуть такими: * Підготовка фундаменту. * Зведення стін. * Настил даху. * Настил перекриттів. Порядок етапів ніколи не змінюється. Ви не настеліть дах до зведення стін - і т. д. Але кожен етап модифікується: стіни, наприклад, можна звести з дерева, цегли або газобетону. Коротко "Шаблонний метод" визначає
1 min read
Поведінкові шаблони проектування

Стан

Аналогія Припустимо, у графічному редакторі ви вибрали інструмент «Пензель». Вона змінює свою поведінку залежно від налаштування кольору: тобто малює лінію вибраного кольору. Коротко Шаблон дозволяє змінювати поведінку класу за зміни стану. Вікіпедія Шаблон "Стан" реалізує машину станів об'єктно орієнтованим способом. Це досягається за допомогою: реалізації кожного стану у вигляді похідного
1 min read
Поведінкові шаблони проектування

Стратегія (Strategy)

Аналогія Візьмемо приклад із пухирцевим сортуванням. Ми її реалізували, але зі зростанням обсягів даних сортування почало виконуватися дуже повільно. Тоді ми зробили швидке сортування (Quick sort). Алгоритм працює швидше на великих обсягах, але на маленьких він дуже повільний. Тоді ми реалізували стратегію, за якої для невеликих обсягів даних використовується бульбашкове
1 min read
Поведінкові шаблони проектування

Відвідувач

Аналогія Туристи зібралися до Дубаї. Спочатку їм потрібен спосіб потрапити туди (віза). Після прибуття вони відвідуватимуть будь-яку частину міста, не питаючи дозволу, ходити де заманеться. Просто скажіть їм про якесь місце — і туристи можуть там побувати. Шаблон відвідувачів допомагає додавати місця для відвідування. Стисло Шаблон «Відвідувач» дозволяє додавати майбутні операції
1 min read
Поведінкові шаблони проектування

Спостерігач (Behavior)

Аналогія Хороший приклад: люди, які шукають роботу, підписуються на публікації на сайтах вакансій та отримують повідомлення, коли з'являються вакансії, які підходять за параметрами. Стисло Шаблон визначає залежність між об'єктами, щоб за зміни стану одного з них його «підлеглі» дізнавалися про це. Вікіпедія У шаблоні «Спостерігач» є об'єкт («суб'єкт»), що веде
1 min read
Поведінкові шаблони проектування

Хранитель

Аналогія Як приклад можна навести калькулятор ("творець"), у якого будь-яка остання виконана операція зберігається в пам'яті ("хранитель"), щоб ви могли знову викликати її за допомогою якихось кнопок ("опікун"). Стисло Шаблон «Зберігач» фіксує та зберігає поточний стан об'єкта, щоб він легко відновлювався. Вікіпедія Шаблон "Зберігач" дозволяє відновлювати об'єкт у його попередньому
1 min read
Поведінкові шаблони проектування

Посередник

Аналогія Коли ви розмовляєте з кимось по мобільному, то між вами та співрозмовником знаходиться мобільний оператор. Тобто сигнал передається через нього, а не безпосередньо. У цьому прикладі оператор — посередник. Стисло Шаблон «Посередник» має на увазі додавання стороннього об'єкта («посередника») для керування взаємодією між двома об'єктами («колегами»). Шаблон допомагає зменшити пов'язаність
1 min read
Поведінкові шаблони проектування

Ітератор

Аналогія Гарний приклад – радіоприймач. Ви починаєте з якоїсь радіостанції, а потім переміщаєтеся станціями вперед/назад. Тобто пристрій надає інтерфейс для ітерування каналами. Стисло Шаблон - це спосіб доступу до елементів об'єкта без розкриття базового представлення. Вікіпедія У цьому шаблоні ітератор використовується для переміщення контейнера та забезпечення доступу до елементів контейнера.
1 min read
Поведінкові шаблони проектування

Команда

Аналогія Ви прийшли до ресторану. Ви (Client) просите офіціанта (Invoker) принести блюда (Command). Офіціант перенаправляє запит шеф-кухареві (Receiver), який знає, що і як готувати. Інший приклад: ви (Client) включаєте (Command) телевізор (Receiver) за допомогою пульта (Invoker). Стисло Шаблон "Команда" дозволяє інкапсулювати дії в об'єкти. Ключова ідея – надати кошти відділення клієнта
1 min read
Поведінкові шаблони проектування

Ланцюжок відповідальності

Аналогія Допустимо, для вашого банківського рахунку є три способи оплати (A, B і C). Кожен має на увазі різні доступні суми грошей: A - 100 доларів, B - 300, C - 1000. Пріоритетність способів при оплаті: А, потім В, потім С. Ви намагаєтеся купити щось за 210 доларів. На підставі
1 min read
Структурні шаблони проектування

Заступник

Аналогія Відкрити двері з електронним замком можна за допомогою картки доступу (access card) або кнопки обходу системи безпеки. Тобто основна функціональність дверей – відкритися, а поверх неї може бути ще якась функціональність – «заступник». Стисло За допомогою шаблону "Заступник" клас представляє функціональність іншого класу. Вікіпедія У найбільш загальної формі «Заступник» - це
1 min read
Структурні шаблони проектування

Пристосуванець

Аналогія Зазвичай у закладах громадського харчування заварюють чай не окремо для кожного клієнта, а відразу в якійсь великій ємності. Це дозволяє економити ресурси: газ/електрику, час і т. д. Шаблон «Пристосуванець» присвячений загальному використанню (sharing). Стисло Шаблон застосовується для мінімізації використання пам'яті чи обчислювальної вартості рахунок загального використання якомога більшої
1 min read
Структурні шаблони проектування

Фасад

Аналогія Як увімкнути комп'ютер? Ви скажете: "Натиснути кнопку увімкнення". Це тому, що ви використовуєте простий інтерфейс, наданий комп'ютером назовні. А в ньому відбувається дуже багато процесів. Простий інтерфейс для складної підсистеми – це фасад. Стисло Шаблон Фасад надає спрощений інтерфейс для складної підсистеми. Вікіпедія «Фасад» — це об'єкт, що надає спрощений інтерфейс
1 min read
Структурні шаблони проектування

Декоратор

Аналогія Допустимо, у вас свій автосервіс, що надає різні послуги. Як виставляти клієнтам рахунок? Додавати послідовно послуги та їх вартість - і врешті-решт вийде підсумкова сума до оплати. Тут кожен тип послуги це «декоратор». Стисло Шаблон «Декоратор» дозволяє динамічно змінювати поведінку об'єкта під час виконання, обгортаючи його в об'єкт класу
1 min read
Структурні шаблони проектування

Компонувальник

Аналогія Кожна компанія складається із співробітників. У кожного співробітника є ті самі властивості: зарплата, обов'язки, звітність перед кимось, субординація... Коротко Шаблон «Компонувальник» дозволяє клієнтам обробляти окремі об'єкти в єдиному порядку. Вікіпедія Шаблон «Компоновщик» описує загальний порядок обробки групи об'єктів, немов це одиночний екземпляр об'єкта. Суть шаблону — компонування об'єктів у деревоподібну
1 min read
Структурні шаблони проектування

Міст

Аналогія Допустимо, у вас є сайт з кількома сторінками. Ви бажаєте дозволити користувачам змінювати теми оформлення сторінок. Як би ви вчинили? Створили множинні копії кожної сторінки для кожної теми або просто зробили окремі теми та підвантажували їх відповідно до налаштувань користувачів? Шаблон "Міст" дозволяє реалізувати другий підхід. Коротко Шаблон "Міст"
1 min read
Структурні шаблони проектування

Адаптер

Аналогія Допустимо, у вас на карті пам'яті є якісь картинки. Їх слід перенести на комп'ютер. Потрібен адаптер, сумісний із портом комп'ютера, в який можна вставити картку пам'яті. У цьому прикладі адаптер - це картридер. Ще один приклад: перехідник, що дозволяє використовувати американський блок живлення із російською розеткою. Третій приклад: перекладач
1 min read
Породжуючі шаблони проектування

Прототип (Prototype)

Аналогія Пам'ятаєте клоновану овечку Доллі? Так ось, цей шаблон проектування присвячений клонування. Коротко Об'єкт створюється у вигляді клонування існуючого об'єкта. Вікіпедія Шаблон «Прототип» використовується, коли типи об'єктів, що створюються, визначаються екземпляром-прототипом, клонованим для створення нових об'єктів. Тобто шаблон дозволяє дублювати існуючий об'єкт та модифікувати копію відповідно до потреб. Без проблем
1 min read
Породжуючі шаблони проектування

Будівельник (Builder)

Аналогія Допустимо, ви прийшли в забігайлівку, замовили бургер дня, і вам видали його без запитань. Це приклад «Проста фабрика». Але іноді логіка створення складається з більшої кількості кроків. Наприклад, при замовленні бургера є кілька варіантів хліба, начинки, соусів, додаткових інгредієнтів. У таких ситуаціях допомагає шаблон Будівник. Коротко Шаблон дозволяє створювати
1 min read
Породжуючі шаблони проектування

Абстрактна фабрика (Abstract Factory)

Аналогія Повернемося, наприклад, з дверима з «Простої фабрики». Залежно від своїх потреб ви можете купити дерев'яні двері в одному магазині, сталеві - в іншому, пластикові - в третьому. Для монтажу вам знадобляться різні фахівці: дерев'яних дверей потрібен тесляр, сталевий - зварювальник, пластиковий - спеціаліст з ПВХ-профілів. Коротко Це фабрика фабрик.
1 min read
Породжуючі шаблони проектування

Фабричний Метод (Factory Method)

Аналогія Одна кадровичка не в змозі провести співбесіди з усіма кандидатами на всі посади. Залежно від вакансії, вона може делегувати різні етапи співбесід різним співробітникам. Коротко Це спосіб делегування логіки створення об'єктів (instantiation logic) дочірнім класам. Вікіпедія У класо-орієнтованому програмуванні (class-based programming) фабричним методом називають шаблон проектування, що породжує, використовує
1 min read
Породжуючі шаблони проектування

Проста Фабрика (Simple Factory)

Аналогія Допустимо, ви будуєте будинок і вам потрібні двері. Буде бардак, якщо кожен раз, коли вам потрібні двері, ви станете озброюватися інструментами і робити їх на будмайданчику. Натомість ви замовите двері на фабриці. Коротко Проста фабрика просто генерує екземпляр для клієнта без надання будь-якої логіки екземпляра. Вікіпедія У об'єктно орієнтованому
1 min read
Породжуючі шаблони проектування

Одинак (Singleton)

Аналогія із реального життя У підрозділу може лише один керівник. Він бере участь завжди, коли потрібно. І тут керівник і є одиночкою. Короткий опис Паттерн гарантує, що у додатку існуватиме лише один екземпляр цього класу. Вікіпедія Шаблон "Одинак" дозволяє обмежувати створення класу єдиним об'єктом. Це зручно, коли для координації дій
1 min read