java 观察者模式
package com.dream.subscription;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
/**
*
* @author Xianping
*/
public abstract class Subscription {
/**
* 存放各信息频道的订阅关系信息
*/
private final static Map<String, Set<Subscription>> manage = new ConcurrentHashMap<String, Set<Subscription>>();
/**
* 广播信息
* @param channel 信息频道
* @param args 信息数据
*/
protected void dispatchEvent (String channel, Object... args){
Set<Subscription> get = manage.get(channel);
for (Subscription subscription : get) {
subscription.message(channel, args);
}
}
/**
* 订阅频道
* @param channel 信息频道
* @param subscription 订阅频道的对象
*/
protected synchronized void addEventListener (String channel, Subscription subscription){
if (!manage.containsKey(channel)) {
manage.put(channel, new HashSet<Subscription>());
}
manage.get(channel).add(subscription);
}
/**
* 订阅者对象接收广播信息的方法
* @param channel 信息频道
* @param args 信息内容
*/
protected abstract void message (String channel, Object... args);
}