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

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

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

Шрифт:

-
+

Інтервал:

-
+

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

Добавити
1 ... 44 45 46 ... 58
Перейти на сторінку:
class="line">class Textbox extends Component is
  // ...

class Checkbox extends Component is
  method check() is
    dialog.notify(this, "check")
  // ... При­да­тні­сть

Коли вам скла­дно змі­ню­ва­ти деякі класи через те, що вони мають вели­че­зну кількі­сть хао­ти­чних зв’язків з інши­ми класами.

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

Коли ви не може­те повто­рно вико­ри­сто­ву­ва­ти клас, оскі­льки він зале­жи­ть від без­лі­чі інших класів.

Після засто­су­ва­ння пате­рна компо­не­нти втра­чаю­ть коли­шні зв’язки з інши­ми компо­не­нта­ми, а все їхнє спі­лку­ва­ння від­бу­ває­ться опо­се­ре­дко­ва­но, через об’єкт посередника.

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

Якщо рані­ше зміна від­но­син в одно­му компо­не­нті могла при­зве­сти до лави­ни змін в усіх інших компо­не­нтах, то тепер вам доста­тньо ство­ри­ти під­клас посе­ре­дни­ка та змі­ни­ти в ньому зв’язки між компонентами.

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

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

Ство­рі­ть зага­льний інте­рфе­йс посе­ре­дни­ків та опи­ші­ть в ньому мето­ди для взає­мо­дії з компо­не­нта­ми. У най­про­сті­шо­му випа­дку доста­тньо одно­го мето­ду для отри­ма­ння пові­до­мле­нь від компонентів.

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

Реа­лі­зу­йте цей інте­рфе­йс у класі конкре­тно­го посе­ре­дни­ка. Помі­сті­ть до нього поля, які місти­ти­му­ть поси­ла­ння на всі об’єкти компонентів.

Ви може­те піти далі і пере­мі­сти­ти код ство­ре­ння компо­не­нтів до класу конкре­тно­го посе­ре­дни­ка, пере­тво­ри­вши його на фабрику.

Компо­не­нти теж пови­нні мати поси­ла­ння на об’єкт посе­ре­дни­ка. Зв’язок між ними зру­чні­ше всьо­го вста­но­ви­ти шля­хом пода­ння посе­ре­дни­ка до пара­ме­трів кон­стру­кто­ра компонентів.

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

Пере­ва­ги та недо­лі­ки Усу­ває зале­жно­сті між компо­не­нта­ми, дозво­ляю­чи вико­ри­сто­ву­ва­ти їх повторно. Спро­щує взає­мо­дію між компонентами. Центра­лі­зує керу­ва­ння в одно­му місці. Посе­ре­дник може сильно «роз­ду­ти­ся». Від­но­си­ни з інши­ми пате­рна­ми

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

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

Посе­ре­дник та Фасад схожі тим, що нама­гаю­ться орга­ні­зу­ва­ти робо­ту бага­тьох існую­чих класів.

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

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

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

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

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

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

Також відомий як: Memento

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

Про­бле­ма

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

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

1 ... 44 45 46 ... 58
Перейти на сторінку:

 Увага!

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

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