Модель делегирования обработки событий
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

n Событие – объект, описывающий
изменение состояния источника

n Источник – объект, генерирующий
события

n Слушатель – объект, получающий
уведомление о событии

n Источник генерирует событие и посылает его одному или нескольким слушателям

n Слушатель просто ждет поступления события

n Получив событие, слушатель обрабатывает его и затем возвращает управление

 




Модель делегирования обработки событий

n Слушатели должны зарегистрироваться у источника – события посылаются только зарегистрировавшимся слушателям

n Логика кода, обрабатывающего события, отделена от логики интерфейса, генерирующего события

n Это реализация паттерна проектирования Observer

 

Слушатели и источники

n Один источник может генерировать несколько типов событий

n Один слушатель может быть слушателем нескольких видов событий

n Один слушатель может получать события одного вида от нескольких источников

n Слушатель может быть источником для других слушателей и для самого себя

n Источник может быть слушателем других источников и самого себя

 

События JavaBeans

n Класс слушателя должен наследовать от базового типа слушателя для вида событий EventListenerType

n Чтобы слушатель события мог быть зарегистрирован, компонент должен предоставлять метод
public void addEventListenerType(EventListenerType a)

n Чтобы слушатель события мог отказаться от регистрации, компонент должен предоставлять метод
public void removeEventListenerType(EventListenerType a)

n Если компонент позволяет регистрировать одновременно ограниченное количество обработчиков события, то метод добавления слушателя должен объявлять исключение
java . util . TooManyListenersException

n Работа с событиями также может вестись на уровне средства разработки

 

Вопрос 71 Вложенные типы, их классификация и особенности. Вложенные классы и интерфейсы. 45-48 Лекция Компонентная модель в ооп. Технология JavaBeans.

 




Синтаксически корректный код

class MyFirstClass {

public static void main(String[] args) {

// ...

}

class MySecondClass {

private int a, b;

public MySecondClass(int a, int b) {

this.a = a;

this.b = b;

}

//...

}

}

 

Вложенные типы

n Считаются частью внешнего типа, со всеми вытекающими правами

n Позволяют представить тип в виде логически связанных структурных групп и контекстов

n Простой и эффективный инструмент объединения семантики соотносимых объектов

 

Статические вложенные классы

n Nested class

n Простейшая форма вложенного класса

n Может использоваться любыми классами, обладающими соответствующими правами доступа

n Классы, вложенные в интерфейсы, статичны по определению

class ClassA {

int a = 10;

protected static class ClassB {

int b = 15;

}

}

public class Test {

public static void main(String[] args) {

ClassA.ClassB t = new ClassA.ClassB();

System.out.println(t.b);

}

}

 

Вложенные интерфейсы

n Всегда статичны (модификатор static по умолчанию)

n Доступ определяется доступом внешнего класса или интерфейса и модификаторами доступа

class ClassA {

public interface InterfaceB {

//...

}

//...

public InterfaceB get() {

//...

}

}

public class Test {

public static void main(String[] args) {

ClassA.InterfaceB t = (new ClassA()).get();

}

}

 

Вопрос 72 Внутренние, локальные и анонимные классы. 49-53. Лекция Компонентная модель в ооп. Технология JavaBeans.

 

Нестатические вложенные классы

n Называются внутренними (inner) классами

n Тип находится в контексте объекта

n Объект внутреннего класса всегда ассоциируется с т.н. внешним объектом

n Элементы внутреннего класса имеют доступ к полям и методам внешнего объекта

n Это позволяет создавать семейства сильно связанных объектов

 

Пример внутреннего класса

class ClassA {

private int a = 10;

protected class ClassB {

private int b = 15;

public int getA() { return a; }

public int getB() { return b; }

}

public ClassB get() { return new ClassB(); }

public void setB(int b, ClassB obj) {

obj.b = b;

}

}

public class Test {

public static void main(String[] args) {

ClassA objA = new ClassA();

ClassA.ClassB objB = objA.get();

objA.setB(20, objB);

System.out.println(objB.getA() + " " + objB.getB());

}

}

 

Локальные классы

n Описываются в теле блока

n Экземпляры имеют доступ к полям и методам внешнего объекта

n Экземпляры имеют доступ к локальным переменным, снабженным модификатором final

public class ClassA {

public Iterator iterator() {

class Iter implements Iterator {

//...

}

//...

  return new Iter();

}

 

Анонимные классы

n Описываются непосредственно в выражении new и служат его частью

n Тип, указанный после new является базовым для объявляемого анонимного класса

n Могут расширять один класс или реализовывать один интерфейс

n Явно писать implements или
extends нельзя

n Не могут иметь конструкторов

 


Пример анонимного класса

import java.awt.*;

import javax.swing.*;

public class MyApplet extends JApplet {

...

public void init() {

JButton btn = new JButton("?");

getContentPane().add(btn);

btn.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

   ((JButton)e.getSource()).setText("!");

}

});

}

}

 

Вопрос 73 Графические приложения: технологии AWT и Swing. 2-7. Лекция Основы создания графических приложений.

 

Дата: 2019-07-30, просмотров: 188.