→ Пошук по сайту       Увійти / Зареєструватися
Знання Патерни

Патерни поведінки — Behavioral patterns

Ще однією групою патернів є такі, що акцентують свою увагу на поведінці. Вони або інкапсулюють поведінку, або дозволяють її розподілити.

Щоб забезпечити почергову передачу роботи від одного класу до іншого і так дальше, аж до поки робота не буде виконана, використовують Ланцюжок Відповідальностей.

Інколи краще запакувати інформацію про дії, які слід виконати, в один об’єкт Команди і переслати на опрацювання, або ж просто виконати в потрібному місці.

Багато явищ можна описати за допомогою якоїсь спеціальної мови, наприклад погодні умови можуть бути записані значками, зрозумілими тільки метеорологам, але якщо вам подана граматика цієї мови і пояснення значків, цілком можливо, що ви зможете Інтерпретувати метеорологічне речення і зрозуміти його суть.

Колекції об’єктів можуть бути «хитрими» і містити багато підколекцій та поокремих об’єктів. Щоб спростити життя користувачу такої колекції та щоб не викривати логіки колекції, придумали Ітератор, який допомагає легко і грамотно обійти усі об’єкти всередині.

Спрощення коодинації роботи між деякою кількістю об’єктів може бути досягнуте виділенням посередника або медіатора. Медіатором може бути ваш бригадир на будівництві або ваш менеджер.

Можливість повернутися до попереднього стану системи має велике значення. Така функціональність може бути досягнута Хранителем.

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

Стан системи та умови переходу між ними можуть бути винесені в окремі класи для легшого контролю над цією системою. Все це досягається за допомогою дизайн патерну Стан.

Піти на право чи на ліво, а чи взагалі кудись йти? Відповідь на це питання може залежати від певних параметрів і є нічим іншим як певною Стратегією.

Втомились від одноманітної роботи, яка завжди шаблонна, окрім деталей, які час від часу міняються? Віддайте цю робому Шаблонному Методу.

Коли потрібно виконати деякі дії над об’єктом, причому вони кожного разу різні, такі дії можуть бути винесені в окремі класи-відвідувачі. Опісля ваш об’єкт може приймати Відвідувачів для виконання конкретних дій.

По матеріалам книги Андрія Будая "Дизайн патерни – просто, як двері". Матеріал розміщується за домовленістю з автором.
Робота представлена за умовами ліцензії Creative Commons Attribution-NonCommercial 3.0 Unported License.

13. Ланцюжок Відповідальностей — Chain of responsibility

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

14. Команда — Command

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

15. Інтерпретер — Interpreter

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

16. Ітератор — Iterator

Уявіть, що ви розробник статегічної воєнної гри. Армія має складну структуру: вона складається із героя і трьох груп. Коли генерал видає указ і ресурси щоб полікувати всіх воїнів (герой також є воїном), ви хочете проітерувати по всіх солдатах і викликати метод Treat() на кожному екземплярі. Як це можна зробити легко і без вникання в структуру армії?

17. Медіатор — Mediator

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

18. Хранитель — Memento

Якщо ви коли небуть бавилися в «стрілялки», то дуже вірогідно, що ви знайомі із значенням хот-кіїв F5 та F9. I, навіть, якщо ви таки не мали шансу в житті погратися в «шпільки», ідея швидкого збереження поточного стану і відновлення до нього ідеологічно є знайомою (навіть якщо це було Ctrl+Z у програмі Word).

19. Спостерігач — Observer

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

20. Стан — State

Уявімо, що ми маємо розробити програму для опрацювання замовлень (Orders). Замовлення можуть бути в одному із декількох станів: новий (NewOrder), зареєстрований (Registered), погоджений (Granted), відправлений (Shipped), оплачений (Invoiced), відмінений (Cancelled).

21. Стратегія — Strategy

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

22. Шаблонний метод — Template method

Уявімо собі, що ми маємо розробити систему пошуку повідомлень для поштової стриньки. Процес пошуку складається із декількох операцій, які є загальними для всіх повідомлень, але специфіка методів може відрязнятися для деяких типів повідомлень.

23. Відвідувач — Visitor

Уявімо собі, що ви нарешті спромоглися створити свою власну компанію, і оскільки вона пристойного розміру, ви вирішили орендувати для неї цілу будівлю. У нас держава дуже хороша і дбає про підприємства. А щоб у підприємств усе відповідало вимогам, постійно висилаються різноманітні перевірки.
загрузка...
Сторінки, близькі за змістом