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

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

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

Шрифт:

-
+

Інтервал:

-
+

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

Добавити
1 ... 47 48 49 ... 58
Перейти на сторінку:

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

Також відомий як: Видавець-Підписник, Слухач, Observer

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

Про­бле­ма

Уяві­ть, що ви маєте два об’єкти: Покупець і Магазин. До мага­зи­ну мають ось-ось заве­зти новий товар, який ціка­ви­ть покупця.

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

Пості­йне від­ві­ду­ва­ння мага­зи­ну чи спам?

З іншо­го боку, мага­зин може роз­си­ла­ти спам кожно­му своє­му поку­пце­ві. Бага­тьох поку­пців це засму­ти­ть, оскі­льки товар спе­ци­фі­чний і потрі­бний не всім.

Вихо­ди­ть конфлікт: або поку­пе­ць гає час на періо­ди­чні пере­ві­рки, або мага­зин роз­тра­чує ресу­рси на непо­трі­бні сповіщення.

Ріше­ння

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

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

Під­пи­ска на події.

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

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

Спо­ві­ще­ння про події.

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

Ана­ло­гія з життя

Перед­пла­та та доста­вка газет.

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

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

Стру­кту­ра

Вида­ве­ць воло­діє вну­трі­шнім ста­ном, зміни якого ціка­во від­слі­дко­ву­ва­ти під­пи­сни­кам. Вида­ве­ць місти­ть меха­ні­зм під­пи­ски: спи­сок під­пи­сни­ків та мето­ди під­пи­ски/від­пи­ски.

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

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

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

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

Кліє­нт ство­рює об’єкти вида­вців і під­пи­сни­ків, а потім реє­струє під­пи­сни­ків на онов­ле­ння у видавцях.

Псе­вдо­код

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

При­клад спо­ві­ще­ння об’єктів про події в інших об’єктах.

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

У цій реа­лі­за­ції реда­ктор не веде спи­сок під­пи­сни­ків само­сті­йно, а деле­гує це вкла­де­но­му об’єкту. Це дає змогу вико­ри­сто­ву­ва­ти меха­ні­зм під­пи­ски не лише в класі реда­кто­ра, а і в інших кла­сах програми.

Для дода­ва­ння до про­гра­ми нових під­пи­сни­ків не потрі­бно змі­ню­ва­ти класи вида­вців, допо­ки вони пра­цюю­ть із під­пи­сни­ка­ми через зага­льний інтерфейс.

// Базовий клас-видавець. Містить код керування підписниками та
// надсилання їм сповіщень.
class EventManager is
  private field listeners: hash map of event types and listeners

  method subscribe(eventType, listener) is
    listeners.add(eventType, listener)

  method unsubscribe(eventType, listener) is
    listeners.remove(eventType, listener)

  method notify(eventType, data) is
    foreach (listener in listeners.of(eventType)) do
      listener.update(data)

// Конкретний клас-видавець, що містить цікаву для інших
1 ... 47 48 49 ... 58
Перейти на сторінку:

 Увага!

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

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