|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Учасники паттерна. 1. Subject– суб’єкт Використовується об’єктами для реєстрації в якості спостерігачів, а також для видалення з цього списку:1. Subject – суб’єкт Використовується об’єктами для реєстрації в якості спостерігачів, а також для видалення з цього списку: - володіє інформацією про своїх спостерігачів. За суб’єктом може «слідкувати» будь-яка кількість спостерігачів; - надає інтерфейс для приєднання і від’єднання спостерігачів. 2. Observer – спостерігач. Кожний потенційний спостерігач повинний реалізувати інтерфейс Observer. Інтерфейс містить єдиний метод Update (), що викликається при зміні стану суб’єкта: - визначає інтерфейс оновлення для об’єктів, які повинні бути повідомлені про зміну стану суб’єкта. 3. ConcreteSubject – конкретний суб’єкт реалізує інтерфейс Subject. Крім методів реєстрації і видалення, суб’єкт також реалізує метод notіfyObservers (), що оповіщає всіх поточних спостерігачів про зміну стану: - зберігає стан, який представляє інтерес для конкретного спостерігача ConcreteObserver; - посилає інформацію своїм спостерігачам, коли відбувається зміна стану; - може мати get - і set - методи для зміни стану. 4. ConcreteObserver – конкретний спостерігач. Спостерігачі можуть відноситися до будь-якого класу, що реалізує інтерфейс Observer. Кожний спостерігач реєструється в конкретного суб’єкта для одержання оновлень: - зберігає посилання на об’єкт класу ConcreteSubject; - зберігає дані, які повинні бути узгоджені з даними суб’єкта; - реалізує інтерфейс оновлення, визначений в класі Observer, щоб підтримувати узгодженість з суб’єктом. Паттерни Chain of Responsibility, Command, Mediator і Observer показують, як можна розділити відправників і одержувачів запитів з урахуванням своїх особливостей. Chain of Responsibility передає запит відправника по ланцюжку потенційних одержувачів. Command визначає зв’язок – «відправник-одержувач» за допомогою підкласу. У Mediator відправник і одержувач посилаються один на одного побічно, через об’єкт-посередник. В паттерні Observer зв’язок між відправником і одержувачем є слабким, при цьому кількість одержувачів може конфігуруватися під час виконання. Особливості програмної реалізації. Реалізація паттерна Observer може бути описана по крокам [26,28,31]: - змоделюйте «незалежну» функціональність за допомогою абстракції «суб’єкт»; - змоделюйте «залежну» функціональність за допомогою ієрархії «спостерігач»; - клас Subject пов’язаний тільки з базовим класом Observer; - спостерігачі реєструються у суб’єкта; - суб’єкт сповіщає всіх зареєстрованих спостерігачів; - спостерігачі «дістають» необхідну їм інформацію від об’єкта Subject; - клієнт встановлює кількість і типи спостерігачів; - бажано, щоб усі ці об’єкти мали однаковий інтерфейс. Якщо інтерфейси не будуть однаковими, прийдеться модифікувати суб’єкт – тобто той об’єкт, що ініціює очікувану подію, щоб він міг звертатися до об’єктів-спостерігачів різного типу. Якщо всі об’єкти-спостерігачі будуть одного типу, то суб’єкт легко зможе повідомити кожний з них. Щоб досягти цієї мети можна поступити наступним чином: - у мові Java, імовірно, найкраще використовувати інтерфейс (щоб підвищити гнучкість або просто по необхідності). - у мові C ++ можна використовувати одиночне або множинне спадкування – виходячи з конкретних обставин. Зазвичай, потрібно, щоб об’єкти-спостерігачі знали, за ким вони повинні спостерігати, а суб’єкт був звільнений від необхідності знати, які саме об’єкти-спостерігачі від нього залежать. Щоб досягти цього, необхідно надати кожному з об’єктів-спостерігачів можливість зареєструватися в суб’єкта. Оскільки всі об’єкти-спостерігачі мають той самий тип, у клас-суб’єкт необхідно додати два методи, а саме: - метод attach (Observer). Додає заданий об’єкт класу Observer до списку об’єктів-спостерігачів даного суб’єкта; - метод detach (Observer). Видаляє заданий об’єкт класу Observer зі списку об’єктів-спостерігачів даного суб’єкта. Тепер, коли клас Subject може реєструвати об’єкти класу Observer, дуже просто сповістити всі об’єкти-спостерігачі, що зареєструвалися, про настання очікуваної події. Для цього в кожному конкретному типі класу Observer реалізується метод update (оновити). В класі Subject реалізується метод notіfy, що переглядає список спостерігачів, які зареєструвалися, і викликає метод update кожного з них. Метод update об’єктів-спостерігачів повинний включати програмний код обробки настання очікуваної події. Однак, просто повідомити кожний об’єкт-спостерігач про настання події буде недостатньо. Об’єкту-спостерігачу може знадобитися додаткова інформації про подію, а не просте повідомлення про те, що вона відбулася. Тому в суб’єкт варто додати ще один або декілька методів, які дозволяють об’єктам-спостерігачам одержати ту інформацію, яку вони потребують. Класи взаємодіють між собою наступним чином: 1. Об’єкти класу Оbserver підключаються до класу суб’єкту при їх ініціалізації. Якщо об’єкту класу Оbserver необхідна додаткова інформація від суб’єкта, він повинен передати викликуваному об’єкту посилання на свій метод update. 2. Щораз при додаванні нового об’єкта класу-суб’єкту, його метод notіfy викликає всі зареєстровані об’єкти класу Оbserver. 3. Кожний об’єкт класу Observer викликає метод getState для одержання інформації про нового доданого клієнта – це необхідно йому, щоб з’ясувати, які дії варто здійснити. Зауваження. Зазвичай, для одержання необхідної інформації потрібно декілька методів. Для додавання і видалення об’єктів, що оповіщаються, часто використовуються статичні методи. Причина в тому, що об’єкти-спостерігачі повинні бути сповіщені про всіх нових суб’єктах. Разом з повідомленням спостерігачу передається посилання на новий створений об’єкт опису суб’єкта. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.) |