Язык программирования Java

Содержание

Слайд 2

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

Определяет между объектами зависимость типа один-ко-многим так, что при изменении состояния

Наблюдатель (Observer) Определяет между объектами зависимость типа один-ко-многим так, что при изменении
одного объекта, все зависящие от него объекты получают об этом оповещение.

Слайд 3

Наблюдатель

class LogConsole extends Terminal{
private color = Color.BLACK;
void setColor(Color c){
this.color

Наблюдатель class LogConsole extends Terminal{ private color = Color.BLACK; void setColor(Color c){
= c;
}
}

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

Слайд 4

Наблюдатель (cont.)

class MainWindow{
LogConsole logConsole = LogConsole.create();
void userAction(Action a){
if (a.getLevel()

Наблюдатель (cont.) class MainWindow{ LogConsole logConsole = LogConsole.create(); void userAction(Action a){ if
==
Level.isCritical())
{
logConsole.setColor(Color.RED);
}
}
}

Данный класс может напрямую изменять состояние подчиненного объекта при изменении ситуации:

Слайд 5

Наблюдатель (cont.)

class MainWindow{
… //все поля и методы остаются
IntrusionDetector id =

Наблюдатель (cont.) class MainWindow{ … //все поля и методы остаются IntrusionDetector id
IntrusionDetector.get();
void userAction(Action a){
… //все прошлые действия остаются
if (a.getLevel() ==
Level.isIntrusion()) {
id.alarm();
}
}
}

У нас появился еще один класс, заинтересованный в типе действия пользователя – IntrusionDetector.

Слайд 6

Наблюдатель (cont.)

public interface ActionObserver{
void actionHappen(Action a);
}

Для большей структурированности имеет смысл

Наблюдатель (cont.) public interface ActionObserver{ void actionHappen(Action a); } Для большей структурированности
выделить круг классов, заинтересованных в данном типе событий:

Слайд 7

Наблюдатель (cont.)

class LogConsole extends Terminal implements ActionObserver {
void actionHappen(Action a){
if

Наблюдатель (cont.) class LogConsole extends Terminal implements ActionObserver { void actionHappen(Action a){
(a.getLevel() ==
Level.isCritical())
{
setColor(Color.RED);
}
}
}

Теперь класс LogConsole и IntrusionDetector можно причислить к кругу заинтересованных:

Слайд 8

Наблюдатель (cont.)

class IntrusionDetector implements ActionObserver{
public void actionHappen(Action a){
if (a.getLevel() ==

Наблюдатель (cont.) class IntrusionDetector implements ActionObserver{ public void actionHappen(Action a){ if (a.getLevel()

Level.isIntrusion())
{
alarm();
}

Аналогично с классом IntrusionDetector:

Слайд 9

Наблюдатель (cont.)

class MainWindow{
ActionObserver []observers = new ActionObserver [10];
void userAction(Action a){

Наблюдатель (cont.) class MainWindow{ ActionObserver []observers = new ActionObserver [10]; void userAction(Action
//обход массива
for (…) {
observers[i].actionHappen(a);
}
//заметим, что вся логика по обработке
//события переместилась в конкретные классы.
}
}

Класс MainWindow должен хранить ссылки на все классы, заинтересованные в событиях:

Слайд 10

Наблюдатель (cont.)

class MainWindow{
ActionObserver []observers = new ActionObserver [10];

public void

Наблюдатель (cont.) class MainWindow{ ActionObserver []observers = new ActionObserver [10]; … public
addActionObserver(ActionObserver aa){
observers[last++] = aa;
}
public void removeActionObserver(ActionObserver aa){
//удаление объекта из массива
}
}

Класс MainWindow должен предоставлять интерфейс для пополнения списка объектов, заинтересованных в данных сообщениях:

Слайд 11

Пример реализации наблюдателя в JDK

import java.awt.event.*

List list = new List();
il = new

Пример реализации наблюдателя в JDK import java.awt.event.* … List list = new
ItemListener(){
//метод будет вызываться каждый раз при
//изменении состояния списка
public void itemStateChanged(ItemEvent e){
System.out.println(“event ” + e);
}
};
list.addItemListener(il);

Наблюдатель – любой класс, реализующий один или несколько слушателей: MouseListener, ItemListener, FocusListener, и т.д.

Слайд 12

Наблюдатель (иллюстрация)

Наблюдатель (иллюстрация)
Имя файла: Язык-программирования-Java.pptx
Количество просмотров: 122
Количество скачиваний: 0