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

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

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

Шрифт:

-
+

Інтервал:

-
+

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

Добавити
1 ... 28 29 30 ... 58
Перейти на сторінку:
class="br0">(source)
    salary = logger.load()
  // ... Засто­су­ва­ння

Якщо вам потрі­бно дода­ва­ти об’єктам нові обов’язки «на льоту», непо­мі­тно для коду, який їх використовує.

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

Якщо не можна роз­ши­ри­ти обов’язки об’єкта за допо­мо­гою спадкування.

У бага­тьох мовах про­гра­му­ва­ння є клю­чо­ве слово final, яке може забло­ку­ва­ти спа­дку­ва­ння класу. Роз­ши­ри­ти такі класи можна тільки за допо­мо­гою Декоратора.

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

Пере­ко­найте­ся, що у вашо­му зав­да­нні при­су­тні осно­вний компо­не­нт і декі­лька опціо­на­льних допо­вне­нь-надбу­дов над ним.

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

Ство­рі­ть клас конкре­тно­го компо­не­нта й помі­сті­ть в нього осно­вну бізнес-логі­ку.

Ство­рі­ть базо­вий клас деко­ра­то­рів. Він пови­нен мати поле для збе­рі­га­ння поси­ла­нь на вкла­де­ний об’єкт-компо­не­нт. Усі мето­ди базо­во­го деко­ра­то­ра пови­нні деле­гу­ва­ти робо­ту вкла­де­но­му об’єкту.

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

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

Кліє­нт бере на себе від­по­від­а­льні­сть за конфі­гу­ра­цію і поря­док заго­рта­ння об’єктів.

Пере­ва­ги та недо­лі­ки Більша гну­чкі­сть, ніж у спадкування. Дозво­ляє дода­ва­ти обов’язки «на льоту». Можна дода­ва­ти кілька нових обов’язків одразу. Дозво­ляє мати кілька дрі­бних об’єктів, замі­сть одно­го об’єкта «на всі випа­дки життя». Важко конфі­гу­ру­ва­ти об’єкти, які заго­рну­то в декі­лька обго­рток одночасно. Вели­ка кількі­сть кри­хі­тних класів. Від­но­си­ни з інши­ми пате­рна­ми

Ада­птер змі­нює інте­рфе­йс існую­чо­го об’єкта. Деко­ра­тор покра­щує інший об’єкт без зміни його інте­рфе­йсу. При­чо­му Деко­ра­тор під­три­мує реку­рси­вну вкла­ду­ва­ні­сть, на від­мі­ну від Ада­пте­ру.

Ада­птер надає класу аль­те­рна­ти­вний інте­рфе­йс. Деко­ра­тор надає роз­ши­ре­ний інте­рфе­йс. Замі­сник надає той самий інтерфейс.

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

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

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

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

Але вони можу­ть і спів­пра­цю­ва­ти: Компо­ну­ва­льник може вико­ри­сто­ву­ва­ти Деко­ра­тор, щоб пере­ви­зна­чи­ти функції окре­мих частин дере­ва компонентів.

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

Стра­те­гія змі­нює пове­ді­нку об’єкта «зсе­ре­ди­ни», а Деко­ра­тор змі­нює його «ззо­вні».

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

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

Фасад — це стру­кту­рний пате­рн прое­кту­ва­ння, який надає про­стий інте­рфе­йс до скла­дної систе­ми кла­сів, бібліо­те­ки або фреймворку.

Про­бле­ма

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

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

Ріше­ння

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

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

Напри­клад, про­гра­ма, що зали­ває в соціа­льні мере­жі відео з коше­ня­тка­ми, може вико­ри­сто­ву­ва­ти про­фе­сі­йну бібліо­те­ку для сти­ска­ння відео, але все, що потрі­бно кліє­нтсько­му коду цієї про­гра­ми, — це про­стий метод encode(filename, format). Ство­ри­вши клас з таким мето­дом, ви реа­лі­зує­те свій перший фасад.

1 ... 28 29 30 ... 58
Перейти на сторінку:

 Увага!

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

Подібні книжки до книжки «Занурення в патерни проектування, Олександр Швець» жанру - 💛 Інше:


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