Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб.работа 2a с C# и Java.doc
Скачиваний:
3
Добавлен:
17.08.2019
Размер:
144.9 Кб
Скачать

Часть 2. События в языке Java Делегирование одного обработчика

interface IntEv // Интерфейс события

{

void Handler (int a, String b);

}

class Source // Класс источника

{

IntEv intEv; // Ссылка на обработчик

public Source (IntEv intEv)

{

this.intEv= intEv;

}

// Выполнить делегированную функцию Handler

public void Fire (int x, String s)

{

intEv.Handler (1, "one");

}

}

class Receiver implements IntEv // Класс приёмника

{

// Обработчик события

public void Handler (int a, String b)

{

System.out.println ("a= " + a + " b= "+ b);

}

}

public class TestEv

{

public static void main ()

{

Receiver r= new Receiver (); // Создать приёмник

Source s= new Source (r); // Создать источник

// и подписать обработчик

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

s.Fire (5,"five");

}

}

Делегирование многих обработчиков (Реализация события со многими слушателями)

import java.util.*;

interface IntEv // Интерфейс события

{

void Handler (int a, String b); // Обработчик

}

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

{

ArrayList aL; // Список ссылок на слушателей

public Source ()

{

aL= new ArrayList();

}

// Функция подписки слушателя

public void addListener (IntEv iE)

{

aL.add(iE);

}

// Функция генерирования события

public void Fire (int x, String s)

{

for(int i=0;i<aL.size(); i++)

{

IntEv iE=(IntEv) aL.get(i);

iE.Handler(x, s);

}

}

}

class Listener implements IntEv // Класс слушателя события

{

int n;

public Listener (int N) {n= N;}

// Обработчик события

public void Handler (int a, String b)

{

System.out.println ("n= " + n + " a= " + a + " b= "+ b);

}

}

public class TestEv

{

public static void main ()

{

Listener r1= new Listener (1); // Создать первый слушатель

Listener r2= new Listener (2); // Создать второй слушатель

Source s= new Source (); // Создать источник события

s.addListener(r1); // Подписать первый слушатель на событие

s.addListener(r2); // Подписать второй слушатель на событие

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

s.Fire (5,"five");

}

}

Интерфейс и класс нашего события, суперкласс классов источников нашего события, классы источника и приёмника нашего события

import java.util.*;

class OurEvent // Класс (данных)нашего события

{

private int x;

private String s;

public OurEvent (int X, String S)

{x= X; s= S;}

public int getX() {return x;}

public String getS() {return s;}

}

interface OurListener // Интерфейс нашего события

{

void Handler (Object sender, OurEvent oE);

}

class OurSouceEvent // Суперкласс класса источника нашего события

{

ArrayList aL= new ArrayList ();// Создать список ссылок слушателей

// Добавить слушателя

public void addOurListener (OurListener oL)

{

aL.add (oL);// Добавить ссылку на слушателя нашего события

}

// Удалить слушателя

public void removeOurListener(OurListener oL)

{

aL.remove (oL);// Удалить ссылку на слушателя нашего события

}

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

public void fireOurEvent (int a, String b)

{

OurEvent oE= new OurEvent (a, b);

for (int i= 0; i<aL.size(); i++)

{

OurListener oL= (OurListener) aL.get(i);

oL.Handler (this, oE);

}

}

}

class Source1 extends OurSouceEvent // Класс первого источника события

{

}

class Source2 extends OurSouceEvent // Класс второго источника события

{

// Переопределить функцию fireOurEvent

public void fireOurEvent (int a, String b)

{super.fireOurEvent (a+10,b+" plus ten");}

}

class Receiver implements OurListener // Класс приёмника события

{

// Обработчик события

public void Handler (Object sender, OurEvent oE)

{

System.out.print ("source= " + sender.GetType());

System.out.println (" a= " + oE.getX() + " b= "+ oE.getS());

}

}

public class TestEv

{

public static void main ()

{

Receiver r= new Receiver (); // Создать первый приёмник события

Source1 s1= new Source1 (); // Создать источник события

// и подписать обработчик на событие

s1.addOurListener (r);

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

s1.fireOurEvent (5,"five");

/////

Source2 s2= new Source2 (); // Создать второй источник события

// и подписать обработчик на событие

s2.addOurListener (r);

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

s2.fireOurEvent (5,"five");

}

}