1、观察者
public interface Observer {
// 声明响应方法
public void update(Observable o, Object obj);
}
2、被观察者
public abstract class Observable {
protected List<Observer> observers = new ArrayList<Observer>();
protected void registObserver(Observer observer) {
observers.add(observer);
}
protected void removeObserver(Observer observer) {
observers.remove(observer);
}
protected void notifyObserver(Object object) {
for (Observer observer : observers) {
try {
observer.update(this, object);
} catch (Exception e) {
e.printStackTrace();
System.out.println("###Observable##nofithObserver#发布通知{},事件执行失败{}" + JSONObject.toJSONString(object));
}
}
}
}
3、通知事件
public class ObserverUtil {
private static Observable observable;
private static ScheduledExecutorService schedulePool = Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors());
// 初始化监听器
static {
ObserverUtil.observable = new ObserverUtil.CachedObservable();
observable.registObserver(new JobOne());
observable.registObserver(new JobTwo());
}
public static void notifyObservers(final Object obj){
schedulePool.execute(new Runnable() {
public void run() {
try{
observable.notifyObserver(obj);
}catch(Exception e){
System.out.println("###ObserverUtil##notifyObservers#程池发布通知事件执行失败 信息:{}" + e.getMessage());
}
}
});
}
private static class CachedObservable extends Observable {
}
}
4、工作Job和常量类
public class JobOne implements Observer {
public void update(Observable o, Object obj) {
if(obj instanceof Map) {
if (((Map) obj).get("key").equals("JobOne")) {
System.out.println("###JobOne##JobOne开始执行:" + ((Map) obj).get("key"));
Common.jobOne = true;
}
}
}
}
public class JobTwo implements Observer {
public void update(Observable o, Object obj) {
if (obj instanceof Map) {
if (((Map) obj).get("key").equals("JobTwo")) {
System.out.println("###JobTwo##JobTwo开始执行:" + ((Map) obj).get("key"));
Common.jobTwo = true;
}
}
}
}
public class Common {
public static Boolean jobOne = false;
public static Boolean jobTwo = false;
}
5、测试
public class Test {
public static void main(String[] args) {
System.out.println("jobOne:" + Common.jobOne + "-----jobTwo:" + Common.jobTwo);
Map<String,Object> mapOne = new HashMap<String, Object>();
mapOne.put("key", "JobOne");
mapOne.put("value", "JobOne执行");
ObserverUtil.notifyObservers(mapOne);
Map<String,Object> mapTwo = new HashMap<String, Object>();
mapTwo.put("key", "JobTwo");
mapTwo.put("value", "JobTwo执行");
ObserverUtil.notifyObservers(mapTwo);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("jobOne:" + Common.jobOne + "-----jobTwo:" + Common.jobTwo);
}
}
6、运行结果
jobOne:false-----jobTwo:false
###JobOne##JobOne开始执行:JobOne
###JobTwo##JobTwo开始执行:JobTwo
jobOne:true-----jobTwo:true