观察者模式是一对多(多对多)关系的模式。
User向EventManager注册了listener,事件触发Trigger类调用了EventManager的处理方法,Manager将事件加到队列中。嵌套类开启线程读取队列并逐一调用listeners中的处理方法。
实现伪代码:
Manager类:
User类:
Trigger类:
User向EventManager注册了listener,事件触发Trigger类调用了EventManager的处理方法,Manager将事件加到队列中。嵌套类开启线程读取队列并逐一调用listeners中的处理方法。
实现伪代码:
Manager类:
public class EventManager {
private static List listeners = new ArrayList();
private static List queue = new LinkedList();
public void addListener(Class clazz) {
listeners.add(clazz);
}
public void trigger(Object obj) {
queue.add(obj);
}
public static class Solver extends Thread{
public void run() {
while (queue.size() > 0) {
Object obj = queue.getFirst();
for (Iterator iter = listeners.iterator();iter.hasNext()) {
User user = (User)iter.next();
user.invalid(obj);
}
queue.removeFirst();
}
}
}
}
User类:
public class User {
static {
EventManager.addListener(User.class);
}
public void invalid(Object obj) {
// do something
}
}
Trigger类:
public class Trigger {
public void discriminate() {
EventManager.trigger();
}
}