观察者模式我所理解的是就两个要点
一:有个观察点,就是观察者们集合的地方
二:要抽象出一个观察者接口或者抽象类,观察者们要实现这个接口或者继承这个抽闲类,这样才能统一通知观察者们
不说了,上示例
/**
* 中间人,承担联系观察者们的角色
*/
public class Subject {
private List<Observer> observers = new ArrayList<>();
public synchronized void add(Observer ob){
observers.add(ob);
}
public void noticeAll(){
for (Observer observer : observers) {
observer.noticeHandler();
}
}
}
/**
* 观察者抽象类
*/
public abstract class Observer {
/**
* 把自己注册到中间人那里,想到于到那里报到
* @param sub
*/
public void register(Subject sub){
sub.add(this);
}
/**
* 具体观察者要实现改方法,收到通知会调用这个方法
*/
public abstract void noticeHandler();
}
/**
* 具体观察者实现类
*/
public class OneObserver extends Observer {
@Override
public void noticeHandler() {
System.out.println(Thread.currentThread().getName()+" 收到了通知");
}
@Override
public void register(Subject sub) {
super.register(sub);
System.out.println(Thread.currentThread().getName()+" OneObserver 注册成功");
}
/**
* 随意写个类也行,这里偷懒就写到这里了
* @param args
*/
public static void main(String[] args) {
Subject sub = new Subject();
Observer ob = new OneObserver();
ob.register(sub);
Observer twoOb = new TwoObserver();
twoOb.register(sub);
sub.noticeAll();
}
}
/**
* 具体观察者实现类
*/
public class TwoObserver extends Observer {
@Override
public void noticeHandler() {
System.out.println(Thread.currentThread().getName()+" 收到了通知");
}
@Override
public void register(Subject sub) {
super.register(sub);
System.out.println(Thread.currentThread().getName()+" TwoObserver 注册成功");
}
}
仅个人理解,非喜勿喷!