Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Делегирование одного обработчика




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");

}

}

 

Задание

7) Выполнить приведённые программы с событиями. Модифицировать их в соответствии указаниями преподавателя.

 

8) Создать программу с одним источником и массивом приёмников. Обработчики приёмников должны выдать на консоль дополнительно к данным события также номер объекта источника и номер объекта приёмника.

 

9) Создать программу с массивом источников и одним приёмником. Обработчик приёмника должен выдать на консоль дополнительно к данным события также номер объекта источника и номер объекта приёмника.

 

10) Создать программу с массивом источников и массивом приёмников. Обработчики приёмников должны выдать на консоль дополнительно к данным события также номер объекта источника и номер объекта приёмника.

 

11) Создать программу, состоящую из источника и цепочки приёмников-источников, обеспечивающих передачу сообщений в соответствии с алгоритмом, указанным преподавателем.

Часть 3. Потоки в языке С#

Поток

 

using System;

Using System.Threading;

 

class TestThread

{

static void Main ()

{

// Создать объект типа TestThread

TestThread tT= new TestThread ();

// Создать поток

Thread t= new Thread (new ThreadStart(tT.SumC));

t.Start(); // Запустить объект

}

 

void SumC () // Потоковая функция

{

int a= 10, b= 14, c=0;

for(int i=a;i<b; i++)

{

Console.WriteLine ("i= "+ i);

c= c+i;

Thread.Sleep (10);

}

Console.WriteLine ("c= "+ c);

}

}

 

Потоковые объекты

 

using System;

Using System.Threading;

 

class ThreadObject // Класс потокового объекта

{

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

public ThreadObject (int N)

{

num= N;

// Создать поток с потоковой функцией SumC()

Thread t= new Thread (new ThreadStart(this.SumC));

t.Start (); // Запустить поток объекта

}

//Потоковая функция

Void SumC ()

{

int a= 10, b= 14, c=0;

for(int i=a;i<b; i++)

{

Console.WriteLine ("num= = "+ num +"i= "+ i);

c= c+i;

Thread.Sleep(10);

}

Console.WriteLine("c= "+ c);

}

}

 

class TestThread

{

static void Main ()

{

//Создать первый потоковый объект и запустить его поток

ThreadObject tO1= new ThreadObject (1);

//Создать второй потоковый объект и запустить его поток

ThreadObject tO2= new ThreadObject (2);

}

}

 

Задание

12) Выполнить приведённые программы с потоками. Модифицировать их в соответствии указаниями преподавателя.

 





Поделиться с друзьями:


Дата добавления: 2016-09-03; Мы поможем в написании ваших работ!; просмотров: 222 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Студент всегда отчаянный романтик! Хоть может сдать на двойку романтизм. © Эдуард А. Асадов
==> читать все изречения...

2465 - | 2202 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.