Книги Українською Мовою » 💛 Інше » Занурення в патерни проектування, Олександр Швець 📚 - Українською

Читати книгу - "Занурення в патерни проектування, Олександр Швець"

В нашій бібліотеці можна безкоштовно в повній версії читати книгу онлайн українською мовою "Занурення в патерни проектування" автора Олександр Швець. Жанр книги: 💛 Інше. Наш веб сайт ReadUkrainianBooks.com дає можливість читати повні версії улюблених книг на Вашому гаджеті (IPhone, Android) або комп’ютері абсолютно безкоштовно, без реєстрації та СМС. Також маєте можливість завантажити книги на свій гаджет у форматі PDF, EPUB, FB2. Файли електронних книг - це цифрові файли, які призначені для перегляду на спеціальних пристроях, що відомі як читальні пристрої для електронних книг.

Шрифт:

-
+

Інтервал:

-
+

Добавити в закладку:

Добавити
1 ... 37 38 39 ... 58
Перейти на сторінку:
пита­ти кожно­го з них, чи не хоче він обро­би­ти даний запит.

Якщо важли­во, щоб обро­бни­ки вико­ну­ва­ли­ся один за іншим у суво­ро­му порядку.

Ланцю­жок обов’язків дозво­ляє запу­ска­ти обро­бни­ків один за одним у тій послі­до­вно­сті, в якій вони стоя­ть в ланцюзі.

Якщо набір об’єктів, зда­тних обро­би­ти запит, пови­нен зада­ва­ти­ся динамічно.

У будь-який моме­нт ви може­те втру­ти­ти­ся в існую­чий ланцю­жок і пере­ви­зна­чи­ти зв’язки так, щоби при­бра­ти або дода­ти нову ланку.

Кроки реа­лі­за­ції

Ство­рі­ть інте­рфе­йс обро­бни­ка і опи­ші­ть в ньому осно­вний метод обробки.

Про­ду­майте, в якому вигля­ді кліє­нт пови­нен пере­да­ва­ти дані запи­ту до обро­бни­ка. Най­гну­чкі­ший спо­сіб — це пере­тво­ри­ти дані запи­ту на об’єкт і повні­стю пере­да­ва­ти його через пара­ме­три мето­ду обробника.

Є сенс у тому, щоб ство­ри­ти абстра­ктний базо­вий клас обро­бни­ків, аби не дублю­ва­ти реа­лі­за­цію мето­ду отри­ма­ння насту­пно­го обро­бни­ка в усіх конкре­тних обробниках.

Додайте до базо­во­го обро­бни­ка поле для збе­ре­же­ння поси­ла­ння на насту­пний еле­ме­нт ланцю­жка. Вста­нов­лю­йте поча­тко­ве зна­че­ння цього поля через кон­стру­ктор. Це зро­би­ть об’єкти обро­бни­ків незмі­ню­ва­ни­ми. Але якщо про­гра­ма перед­ба­чає дина­мі­чну пере­бу­до­ву ланцю­жків, може­те дода­ти ще й сетер для поля.

Реа­лі­зу­йте базо­вий метод оброб­ки так, щоб він пере­на­прав­ляв запит насту­пно­му об’єкту, пере­ві­ри­вши його наявні­сть. Це дозво­ли­ть повні­стю при­хо­ва­ти поле-поси­ла­ння від під­кла­сів, давши їм можли­ві­сть пере­да­ва­ти запи­ти далі ланцю­гом, зве­ртаю­чи­сь до батькі­вської реа­лі­за­ції методу.

Один за іншим ство­рі­ть класи конкре­тних обро­бни­ків та реа­лі­зу­йте в них мето­ди оброб­ки запи­тів. При отри­ма­нні запи­ту кожен обро­бник пови­нен вирішити:

Чи може він обро­би­ти запит, чи ні? Чи потрі­бно пере­да­ва­ти запит насту­пно­му обро­бни­ко­ві, чи ні?

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

Кліє­нт може надси­ла­ти запи­ти будь-якому обро­бни­ко­ві ланцю­га, а не лише першо­му. Запит пере­да­ва­ти­ме­ться ланцю­жком, допо­ки який-небу­дь обро­бник не від­мо­ви­ться пере­да­ва­ти його далі або коли буде дося­гну­то кіне­ць ланцюга.

Кліє­нт пови­нен знати про дина­мі­чну при­ро­ду ланцю­жка і бути гото­вим до таких випадків:

Ланцю­жок може скла­да­ти­ся з одно­го об’єкта. Запи­ти можу­ть не дося­га­ти кінця ланцюга. Запи­ти можу­ть дося­га­ти кінця, зали­шаю­чи­сь нео­бро­бле­ни­ми. Пере­ва­ги та недо­лі­ки Зме­ншує зале­жні­сть між кліє­нтом та обробниками. Реа­лі­зує принцип єди­но­го обов’язку. Реа­лі­зує принцип від­кри­то­сті/закри­то­сті. Запит може зали­ши­ти­ся ніким не опрацьованим. Від­но­си­ни з інши­ми пате­рна­ми

Ланцю­жок обов’язків, Кома­нда Посе­ре­дник та Спо­сте­рі­гач пока­зую­ть різні спосо­би робо­ти тих, хто надси­лає запи­ти, та тих, хто їх отримує:

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

Ланцю­жок обов’язків часто вико­ри­сто­вую­ть разом з Компо­ну­ва­льни­ком. У цьому випа­дку запит пере­дає­ться від дочі­рніх компо­не­нтів до їхніх батьків.

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

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

Ланцю­жок обов’язків та Деко­ра­тор мають дуже схожі стру­кту­ри. Оби­два пате­рни базую­ться на принци­пі реку­рси­вно­го вико­на­ння опе­ра­ції через серію пов’яза­них об’єктів. Але є декі­лька важли­вих відмінностей.

Обро­бни­ки в Ланцю­жку обов’язків можу­ть вико­ну­ва­ти дові­льні дії, неза­ле­жні одна від одної, а також у будь-який моме­нт пере­ри­ва­ти пода­льшу пере­да­чу ланцю­жком. З іншо­го боку, Деко­ра­то­ри роз­ши­рюю­ть певну дію, не ламаю­чи інте­рфе­йс базо­вої опе­ра­ції і не пере­ри­ваю­чи вико­на­ння інших декораторів.

Також відомий як: Дія, Транзакція, Action, Command

Кома­нда — це пове­ді­нко­вий пате­рн прое­кту­ва­ння, який пере­тво­рює запи­ти на об’єкти, дозво­ляю­чи пере­да­ва­ти їх як аргу­ме­нти під час викли­ку мето­дів, ста­ви­ти запи­ти в чергу, логу­ва­ти їх, а також під­три­му­ва­ти ска­су­ва­ння операцій.

Про­бле­ма

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

Всі кно­пки про­гра­ми успа­дко­ва­ні від одно­го класу.

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

1 ... 37 38 39 ... 58
Перейти на сторінку:

 Увага!

Сайт зберігає кукі вашого браузера. Ви зможете в будь-який момент зробити закладку та продовжити читання книги «Занурення в патерни проектування, Олександр Швець», після закриття браузера.

Коментарі та відгуки (0) до книги "Занурення в патерни проектування, Олександр Швець"