Suppose that we have a source called
Light, with two operational modes (turn-on and turn-off). The source is capable of notifying its registered listeners, whenever its state changes.- First, we define the
LightEventclass (extends fromjava.util.EventObject) - Next, we define a
LightListenerinterface to bind the source and its listeners. This interface specifies the signature of the handlers,lightTurnedOn(LightEvent)andlightTurnedOff(LightEvent). - In the source
Light, we use anArrayListto maintain its listeners, and create two methods:addLightListner(LightListener)andremoveLightListener(LightListener). An method callednotifyListeners()is written to invoke the appropriate handlers of each of its registered listeners, whenever the state of theLightchanges. - A listener class called
LightWatcheris written, which implements theLightListenerinterface and provides implementation for the handlers.
Event: LightEvent.java
/** LightEvent */
import java.util.EventObject;
public class LightEvent extends EventObject {
public LightEvent (Object src) {
super(src);
}
}
Listener Interface: LightListener.java
/** The LightListener interface */ import java.util.EventListener; public interface LightListener extends EventListener { public void lightOn(LightEvent evt); // called-back when the light has been turned on public void lightOff(LightEvent evt); // called-back when the light has been turned off }Source: Light.java/** The Light Source */ import java.util.*; public class Light { // Status - on (true) or off (false) private boolean on; // Listener list private List<LightListener> listeners = new ArrayList<LightListener>(); /** Constructor */ public Light() { on = false; System.out.println("Light: constructed and off"); } /** Add the given LightListener */ public void addLightListener(LightListener listener) { listeners.add(listener); System.out.println("Light: added a listener"); } /** Add the given LightListener */ public void removeLightListener(LightListener listener) { listeners.remove(listener); System.out.println("Light: removed a listener"); } /** Turn on this light */ public void turnOn() { if (!on) { on = !on; System.out.println("Light: turn on"); notifyListeners(); } } /** Turn off this light */ public void turnOff() { if (on) { on = !on; System.out.println("Light: turn off"); notifyListeners(); } } /** Fire an LightEvent and notify all its registered listeners */ private void notifyListeners() { LightEvent evt = new LightEvent(this); for (LightListener listener : listeners) { if (on) { listener.lightOn(evt); } else { listener.lightOff(evt); } } } }Listener: LightWatcher.java/** An implementation of LightListener class */ public class LightWatcher implements LightListener { private int id; // ID of this listner /** Constructor */ public LightWatcher(int id) { this.id = id; System.out.println("LightWatcher-" + id + ": created"); } /** Implementation of event handlers */ @Override public void lightOn(LightEvent evt) { System.out.println("LightWatcher-" + id + ": I am notified that light is on"); } @Override public void lightOff(LightEvent evt) { System.out.println("LightWatcher-" + id + ": I am notified that light is off"); } }A Test Driver: TestLight.java/** A Test Driver */ public class TestLight { public static void main(String[] args) { Light light = new Light(); LightWatcher lw1 = new LightWatcher(1); LightWatcher lw2 = new LightWatcher(2); LightWatcher lw3 = new LightWatcher(3); light.addLightListener(lw1); light.addLightListener(lw2); light.turnOn(); light.addLightListener(lw3); light.turnOff(); light.removeLightListener(lw1); light.removeLightListener(lw3); light.turnOn(); } }Below are the expected output:Light: constructed and off LightWatcher-1: created LightWatcher-2: created LightWatcher-3: created Light: added a listener Light: added a listener Light: turn on LightWatcher-1: I am notified that light is on LightWatcher-2: I am notified that light is on Light: added a listener Light: turn off LightWatcher-1: I am notified that light is off LightWatcher-2: I am notified that light is off LightWatcher-3: I am notified that light is off Light: removed a listener Light: removed a listener Light: turn on LightWatcher-2: I am notified that light is on
superb bro..
ReplyDeletesuperb bro...
ReplyDelete