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

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

Слайд 1Язык программирования Java
Дмитриев Андрей Владиславович
andrei-dmitriev@yandex.ru
2007


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

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

Слайд 3Наблюдатель
class LogConsole extends Terminal{
private color = Color.BLACK;
void

setColor(Color c){
this.color = c;
}
}

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


Слайд 4Наблюдатель (cont.)
class MainWindow{
LogConsole logConsole = LogConsole.create();
void userAction(Action

a){
if (a.getLevel() ==
Level.isCritical())
{
logConsole.setColor(Color.RED);
}
}
}

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


Слайд 5Наблюдатель (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);
}
Для большей структурированности имеет

смысл выделить круг классов, заинтересованных в данном типе событий:

Слайд 7Наблюдатель (cont.)
class LogConsole extends Terminal implements ActionObserver {
void actionHappen(Action a){

if (a.getLevel() ==
Level.isCritical())
{
setColor(Color.RED);
}
}
}

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


Слайд 8Наблюдатель (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){
//обход массива
for (…) {
observers[i].actionHappen(a);
}
//заметим, что вся логика по обработке
//события переместилась в конкретные классы.
}
}

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


Слайд 10Наблюдатель (cont.)
class MainWindow{
ActionObserver []observers = new ActionObserver [10];

public void addActionObserver(ActionObserver aa){
observers[last++] = aa;
}
public void removeActionObserver(ActionObserver aa){
//удаление объекта из массива
}
}

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


Слайд 11Пример реализации наблюдателя в JDK
import java.awt.event.*

List list = new List();
il =

new ItemListener(){
//метод будет вызываться каждый раз при
//изменении состояния списка
public void itemStateChanged(ItemEvent e){
System.out.println(“event ” + e);
}
};
list.addItemListener(il);

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


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


Слайд 13Наблюдатель (выводы)
Позволяет избежать циклических опросов состояния.
Возможность реализовать неограниченное число наблюдателей.


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

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


Для правообладателей

Яндекс.Метрика