观察者模式定义了多个观察者对象同时监听一个事件的模式。该模式最少包括3个角色:
观察者接口: 该接口定义了 reaction()方法,也就是观察者在监听到事件后做什么操作
多个观察者实现类: 多个观察者都实现了观察者接口
事件监听类: 创建观察者list,监听事件,一旦事件发生,遍历观察者list,逐一调用每个观察者的reaction()方法
Java例程:
//观察者接口 public interface Watcher { public void reaction(String str); }
//多个观察者实现类
public class Watcher1 implements Watcher { @Override public void update(String str) { System.out.println(“Watcher 1 received ” + str); } }
public class Watcher2 implements Watcher { @Override public void update(String str) { System.out.println(“Watcher 2 received” + str); } }
//事件监听类
public class Notifier {
private List<Watcher> list = new ArrayList<Watcher>(); public void addWatcher(Watcher watcher) { list.add(watcher); } public void removeWatcher(Watcher watcher) { list.remove(watcher); } public void notifyWatchers(String str) { for (Watcher watcher : list) { watcher.reaction(); } }
}
//测试代码
public static void main(String[] args) {Notifier notifier= new Notifier();Watcher1 watcher1 = new Watcher1();
Watcher2 watcher2 = new Watcher2();
notifier.addWatcher(watcher1);
notifier.addWatcher(watcher2);
while([事件发生])/事件发生可以是收到一个套接字消息
{ notifier.notifyWatchers([事件传送的信息]);
}
}