Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

Importjava.Uti).*;

/ / Класс данных события

public class HappenData

^ public String date; //Дата

public int what; // Что произошло

public HappenData (String D, int W)

{date= D; what= W;}

>

// Интерфейс HappenListener

public interface HappenLlstener

{

// Обработчик

Void performedHappen (HappenData hD);

>

// Класс Happen

public class Happen

{

ArrayList aL;

// Конструктор

public Happen ( )

{

aL= new ArrayList ( ); // Список

>

// Добавить элемент в список

public vold addHappenListener (HappenListener hL)

{

aL.add (hL);

>

// Удалить элемент из списка

public vold removeHappenListener (HappenListener hL)

{

aL.remove (hL);

}

// Сгенерировать событие

public vold HappenWhat (int What)

<

// Получить объект даты

Date d= new Date ();

// Получить текущую дату и время

String s= d.toLocaleStrlng ();

// Создать объект данных события

HappenData hD= new HappenData(s, What);

// Выполнить делегированные обработчики

for (lnt k=0; k < aL.size(); k++)

{

// Выбрать приёмник из списка

HappenListener h= (HappenListener) aL.get(k);

// Выполнить обработчик текущего приёмника

h.performedHappen (hD);

>

>

///////////////

|| J# Приложение, используюицее пакет cJHappenLfsterner

package cjExample_8_4_2_3;

Import cJHappenListerner.*; | | Импортировать библиотеку

// Класс источника события

class HappenSource extends Happen

{

lnt num; // Номер объекта

public void HappenWhat (lnt What)

{

super.HappenWhat (What);

>

>

|| Класс приёмника события

public class HappenReceiver implements HappenListener

{

lnt num; // Номер объекта

public HappenReceiver (int N)

i

num= N;

>

// Обработчик

public vold performedHappen (HappenData hD)

{

System.out.println ("numRec= " + num + " what= " + hD.what + " "

+ hD.date);

>

public static vold maln ()

{

// Создать объект-источник

HappenSource hS= new HappenSource ();

// Создать первый объект-приёмник

HappenReceiver hRl= new HappenReceiver (1);

// Создать второй объект-приёмник

HappenReceiver hR2= new HappenReceiver (2);

// Подписать первый приёмник на событие

hS.addHappenListener (hRl);

|| Подписать второй приёмник на событие

hS.addHappenListener (hR2);

// Сгенерировать событие

hS.HappenWhat (5);

>

>

/ *

Result:

numRec= 1 what= 5 07.10.2007 20:51

numRec= 2 what= 5 07.10.2007 20:51

*/

Созданный пакет cJHappenListener существенно упростил создание приложе-

ния, применяющего событие Happen, но и наложил ряд ограничений.

Класс HappenSource источника события включает номер num объекта, кото-

рый может быть полезен при тестировании приложения, включающего не-

сколько объектов-источников события.

Класс HappenSource наследует класс Happen библиотеки, что, ограничив его

расширение другими классами, упрощает применение события Happen, по-

скольку наследуемый класс Нарреп уже содержит функции addHappenListener(),

removeHappenListener() и HappenWhat(). Класс HappenReceiver обязан

наследовать интерфейс HappenLiatener, поскольку иначе его объект не будет

корректно применён в объекте источника класса HappenSource - ведь в клас-

се HappenSource применяется интерфейсная ссылка типа HappenLiatener. На-

следовав интерфейс HappenListener, класс HappenReceiver обязан реализовать

обработчик performedHappen().

Подытоживая только что сказанное и взглянув ещё раз на приложение,

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

пакет (библиотеку), создаем классы источника и приемников события, не за-

быв наследовать их соответственно из класса и интерфейса события, а затем

создаём их объекты и обеспечиваем требуемую взаимосвязь этих объектов и

генерирование события, воспользовавшись предопределёнными функциями

события Нарреп.