Наблюдатель (Observer)

Содержание

Слайд 2

Что представляет собой паттерн Observer?

Наблюдатель - паттерн поведения объектов, устанавливающий систему оповещения

Что представляет собой паттерн Observer? Наблюдатель - паттерн поведения объектов, устанавливающий систему
объектами своих соседей в процессе их деятельности.
Паттерн-наблюдатель определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом и автоматически обновляются.

Слайд 3

Главная идея

Основная идея заключается в том, что если какое-то действие происходит

Главная идея Основная идея заключается в том, что если какое-то действие происходит
в одном классе, то оповещаются все классы, заинтересованные в данном изменении.

Слайд 4

Ключевыми объектами являются субъект и наблюдатель.
У субъекта может быть сколько угодно

Ключевыми объектами являются субъект и наблюдатель. У субъекта может быть сколько угодно
зависимых от него наблюдателей.
Все наблюдатели уведомляются об изменениях в состоянии субъекта.
Получив уведомление, наблюдатель опрашивает субъект, чтобы синхронизировать с ним свое состояние.
Такого рода взаимодействие часто называется отношением издатель. Субъект издает или публикует уведомления и рассылает их, даже не имея информации о том, какие объекты являются подписчиками. На получение уведомлений может подписаться неограниченное количество наблюдателей. 

Слайд 5

Способы реализации паттерна Observer

Существует два способа реализации шаблона Observer.
Первый способ

Способы реализации паттерна Observer Существует два способа реализации шаблона Observer. Первый способ
использует классы Observer и Observable из пакета java.util.
Второй способ использует компонентную модель JavaBeans для регистрации событий в компонентах.

Слайд 6

“Observer” применяется в тех случаях, когда система обладает следующими свойствами:

существует, как минимум,

“Observer” применяется в тех случаях, когда система обладает следующими свойствами: существует, как
один объект, рассылающий сообщения
имеется не менее одного получателя сообщений, причём их количество и состав могут изменяться во время работы приложения.

Слайд 7

Нет надобности очень сильно связывать взаимодействующие объекты, что полезно для повторного использования.
Данный

Нет надобности очень сильно связывать взаимодействующие объекты, что полезно для повторного использования.
шаблон часто применяют в ситуациях, в которых отправителя сообщений не интересует, что делают получатели с предоставленной им информацией.

Слайд 8

Проблема
Один объект ("Подписчик") должен знать об изменении состояний или некоторых событиях

Проблема Один объект ("Подписчик") должен знать об изменении состояний или некоторых событиях
другого объекта. При этом необходимо поддерживать низкий уровень связывания с объектом - "Подписчиком".
Решение
Определить интерфейс "Подписки". Объекты - подписчики реализуют этот интерфейс и динамически регистрируются для получении информации о некотором событии. Затем при реализации условленного события оповещаются все объекты - подписчики.

Слайд 9

Принцип действия

Принцип действия

Слайд 10

Пример использования Observer

Класс Users
package observer;
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
public class Users extends Observable

Пример использования Observer Класс Users package observer; import java.util.ArrayList; import java.util.List; import
{
private List loggedIn = new ArrayList();
public void login(String login(String userName, String password) {
if (!passwordValid(userName, password)) {
throw new SecurityException("Пользователь с именем " + userName +
" и паролем '" + password + "' - не найден!");
}
loggedIn.add(userName);
setChanged();
notifyObservers(userName);
}
public void logout(String userName) {
loggedIn.remove(userName);
setChanged();
notifyObservers(userName);
}

Слайд 11

Пример использования Observer

public final boolean passwordValid(String passwordValid(String name, String password) {
boolean res

Пример использования Observer public final boolean passwordValid(String passwordValid(String name, String password) {
= false;
/* ....
* Проверка существования пользователя
* с логином name и паролем password
* ....
* */
return res;
}
public boolean loggedIn(String name) {
return loggedIn.contains(name);
}
}

Слайд 12

Пример использования Observer

Класс Eye
package observer;
import java.util.Observable;
import java.util.Observer;
public class Eye implements Observer {
Users

Пример использования Observer Класс Eye package observer; import java.util.Observable; import java.util.Observer; public
watching;
public Eye(Users users) {
this.watching = users;
watching.addObserver(this);
}
public void update(Observable users, Object userName) {
if (users != watching) {
throw new IllegalArgumentException();
}
StringString name = (String) userName;
if (watching.loggedIn(name)) {
addUser(name);
} else {
removeUser(name);
}
}

Слайд 13

Пример использования Observer

public void removeUser(String name) {
/* ...
* Удаляем пользователя из списка
*

Пример использования Observer public void removeUser(String name) { /* ... * Удаляем
присутсвующих
* ....
*/
}
public void addUser(String name) {
/* ...
* Регистрируем пользователя в списке
* присутсвующих
* ...
*/
}
}

Слайд 14

Преимущества и недостатки

Абстрактная связанность субъекта и наблюдателя. Субъект имеет информацию лишь о том,

Преимущества и недостатки Абстрактная связанность субъекта и наблюдателя. Субъект имеет информацию лишь
что у него есть ряд наблюдателей, каждый из которых подчиняется простому интерфейсу абстрактного класса Observer. Субъекту неизвестны конкретные классы наблюдателей. Таким образом, связи между субъектами и наблюдателями носят абстрактный характер и сведены к минимуму. Поскольку субъект и наблюдатель не являются тесно связанными, то они могут находиться на разных уровнях абстракции системы. Субъект более низкого уровня может уведомлять наблюдателей, находящихся на верхних уровнях, не нарушая иерархии системы. Если бы субъект и наблюдатель представляли собой единое целое, то получающийся объект либо пересекал бы границы уровней (нарушая принцип их формирования), либо должен был находиться на каком-то одном доступном уровне (компрометируя абстракцию уровня).

Слайд 15

Преимущества и недостатки

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

Преимущества и недостатки Поддержка широковещательных коммуникаций. В отличие от обычного запроса для
посылаемого субъектом, не нужно задавать определенного получателя. Уведомление автоматически поступает всем подписавшимся на него объектам. Субъекту не нужна информация о количестве таких объектов, от него требуется всего лишь уведомить своих наблюдателей. Поэтому мы можем в любое время добавлять и удалять наблюдателей. Наблюдатель сам решает, обработать полученное уведомление или игнорировать его. 

Слайд 16

Преимущества и недостатки

Неожиданные обновления.
Поскольку наблюдатели не располагают информацией друг о друге,

Преимущества и недостатки Неожиданные обновления. Поскольку наблюдатели не располагают информацией друг о
им неизвестно и о том, во что обходится изменение субъекта. Безобидная, на первый взгляд, операция над субъектом может вызвать целый ряд обновлений наблюдателей и зависящих от них объектов. Более того, нечетко определенные или плохо поддерживаемые критерии зависимости могут стать причиной непредвиденных обновлений, отследить которые очень сложно. Эта проблема усугубляется еще и тем, что простой протокол обновления не содержит никаких сведений о том, что именно изменилось в субъекте. Без дополнительного протокола, помогающего выяснить характер изменений, наблюдатели будут вынуждены проделать сложную работу для косвенного получения такой информации. 

Слайд 17

Вопросы
Что представляет собой паттерн Observer?
а) паттерн, который предоставляет необходимые функции, но

Вопросы Что представляет собой паттерн Observer? а) паттерн, который предоставляет необходимые функции,
не поддерживает нужного интерфейса
б) паттерн поведения объектов, устанавливающий систему оповещения объектами своих соседей в процессе их деятельности
в) паттерн, контролирующий доступ к объектам, перехватывая все вызовы.
Имя файла: Наблюдатель-(Observer).pptx
Количество просмотров: 256
Количество скачиваний: 1