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

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

16
0
На сайті BooksUkraine.com ви знайдете великий вибір книг українською мовою різних жанрів - від класичних творів до сучасної літератури. "Занурення в патерни проектування" автора Олександр Швець. Жанр книги: Інше. Зберігайте свої улюблені книги у власній бібліотеці, залишайте відгуки та знаходьте нових друзів-читачів. Реєструйтеся та насолоджуйтесь читанням на BooksUkraine.com!

Шрифт:

-
+

Інтервал:

-
+

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

Добавити
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) до книги "Занурення в патерни проектування, Олександр Швець"