如果一个类发生变化,依赖于该类的若干类都会接到通知,并作出相应的相应
观察者模式有两个角色,一个是观察者,一个是被观察者,被观察者内部维护一个观察者的集合,当被观察者发生变化,遍历该集合,通知所有观察者对象,然后观察者根据各自不同的需求做出不同的响应.
代码实例:
//观察者基类
public interface Observer { void update(); }
//观察者一号
public class FirstObserver implements Observer { @Override public void update() { System.out.println("first Observer is notified"); } }
//观察者二号
public class SecodObserver implements Observer { @Override public void update() { System.out.println("Second Observer is notified"); } }
//被观察者
public class Observable { List<Observer> mObservers = new ArrayList<>(); protected void registerObserver(Observer observer) { if (observer == null) { throw new NullPointerException("Observer can not be null"); } synchronized (mObservers) { if (mObservers.contains(observer)) { throw new IllegalArgumentException("Observer has registered"); } mObservers.add(observer); } } protected void unRegisterObserver(Observer observer) { if (observer == null) { throw new NullPointerException("Observer can not be null"); } synchronized (mObservers) { int index = mObservers.indexOf(observer); if (index != -1) { mObservers.remove(index); } } } protected void clearAllObserver() { synchronized (mObservers) { mObservers.clear(); } } public void update() { for (Observer observer:mObservers) { observer.update(); } } }
测试代码:
mObservable = new Observable(); mObservable.registerObserver(new FirstObserver()); mObservable.registerObserver(new SecodObserver());
mObservable.update();