手っ取り早くイベントソース
別にJavaBeansでないと利用できないわけではなし
DingEvent.java
import java.beans.PropertyChangeEvent; public class DingEvent extends PropertyChangeEvent { public DingEvent(Object source) { super(source, null, null, null); } }
DingListener.java
import java.beans.PropertyChangeListener; public interface DingListener extends PropertyChangeListener { }
Bell.java
import java.beans.PropertyChangeSupport; public class Bell { private PropertyChangeSupport support = new PropertyChangeSupport(this); private String name; public Bell(String name) { this.name = name; } public void addDingListener(DingListener listener) { support.addPropertyChangeListener(listener); } public void removeDingListener(DingListener listener) { support.removePropertyChangeListener(listener); } public void ring() { support.firePropertyChange(new DingEvent(this)); } @Override public String toString() { return name; } }
Cittadino.java
import java.beans.PropertyChangeEvent; public class Cittadino implements DingListener { public void propertyChange(PropertyChangeEvent e) { if (e instanceof DingEvent) { System.out.println(e.getSource() + ": dingdong"); } } }
BellRinger.java
public class BellRinger { public static void main(String[] args) { Bell bell = new Bell("Nona la campana"); bell.addDingListener(new Cittadino()); bell.ring(); } }