/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
Handler h = new Handler();
h.run();
}
}
interface Listener {
public void onEvent();
public void onEventWithArgument(MyEvent e);
}
class MyEvent {
// Some properties.
}
class ClassWithEvent {
private final List<Listener> _listeners = new ArrayList<Listener>();
public void addListener(Listener listener) {
_listeners.add(listener);
}
public void removeListener(Listener listener) {
_listeners.remove(listener);
}
private void onEvent() {
for (Listener listener : _listeners) {
listener.onEvent();
}
}
private void onEventWithArgument() {
MyEvent e = new MyEvent();
for (Listener listener : _listeners) {
listener.onEventWithArgument(e);
}
}
public void fireEventWirhArgument() {
onEventWithArgument();
}
}
class Handler {
private final Listener handler1 = new Listener() {
@Override
public void onEvent() {
System.
out.
println("handler 1"); }
@Override
public void onEventWithArgument(MyEvent e) {
System.
out.
println(e.
toString()); }
};
private final Listener handler2 = new Listener() {
@Override
public void onEvent() {
System.
out.
println("handler 2"); }
@Override
public void onEventWithArgument(MyEvent e) {
System.
out.
println(e.
toString()); }
};
public void run() {
ClassWithEvent foo = new ClassWithEvent();
foo.addListener(handler1);
foo.fireEventWirhArgument();
ClassWithEvent foo2 = new ClassWithEvent();
foo2.addListener(handler1);
foo2.fireEventWirhArgument();
}
}