`

观察者模式的使用

阅读更多
观察者模式是一对多(多对多)关系的模式。

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();
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics