- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEventDemo.java
More file actions
Latest commit
91 lines (71 loc) · 2.62 KB
/
Copy pathEventDemo.java
File metadata and controls
91 lines (71 loc) · 2.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// publisher-subscriber demo based on an article from http://www.25hoursaday.com/CsharpVsJava.html
importjava.util.EventObject;
importjava.util.Random;
importjava.util.Stack;
// example event object
classEvenNumberEventextendsEventObject {
privateintnumber;
publicEvenNumberEvent(Objectsource, intnumber) {
// pass the trigger to parent constructor
super(source);
// store number
this.number = number;
}
publicintgetNumber() { returnthis.number; }
}
// subscriber/listener interface to handle ALL listeners
// alternative - base class with a ready implementation
// or interface with a 'default' method
interfaceEvenNumberListener {
voidevenNumberFound(EvenNumberEventene);
}
classPublisher {
// collection for tracking subscribers/listeners
Stack<EvenNumberListener> subscribers = newStack<EvenNumberListener>();
// event trigger
privatevoidOnEvenNumberFound(intnum) {
// loop through subscribers/listeners and trigger callback
for (inti = 0; i < subscribers.size(); i++) {
EvenNumberListenerlistener = (EvenNumberListener) subscribers.get(i);
listener.evenNumberFound(newEvenNumberEvent(this, num));
}
}
// subscriber/listener adder
publicvoidaddEvenNumberEventListener(EvenNumberListenerenl) {
subscribers.add(enl);
}
// subscriber/listener remover
publicvoidremoveEvenNumberEventListener(EvenNumberListenerenl) {
subscribers.remove(enl);
}
// test runner
publicvoidrunNumbers() {
// create randomizer with seed
Randomrand = newRandom(System.currentTimeMillis());
// generate 20 numbers in the range 1-20
// and trigger event if the number is even
for (inti = 0; i < 20; i++) {
intcurrent = (int) rand.nextInt() % 20;
System.out.println("Current number is: " + current);
if ((current % 2) == 0 && current != 0) {
OnEvenNumberFound(current);
}
}
}
}
publicclassEventDemoimplementsEvenNumberListener {
// callback function called when even number is found
publicvoidevenNumberFound(EvenNumberEventene) {
System.out.println("Even number found: " + ene.getNumber());
}
publicstaticvoidmain(String[] args) {
EventDemoed = newEventDemo();
Publisherpub = newPublisher();
// add subscriber/listener
pub.addEvenNumberEventListener(ed);
// run test
pub.runNumbers();
// remove subscriber/listener
pub.removeEvenNumberEventListener(ed);
}
}