当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系
/** * 观察者接口 */ public interface Observer { public void update(); } /** * 观察者1 */ public class Observer1 implements Observer { @Override public void update() { System.out.println("observer1 has received!"); } } /** * 观察者2 */ public class Observer2 implements Observer { @Override public void update() { System.out.println("observer2 has received!"); } } /** * 主题接口 */ public interface Subject { /*增加观察者*/ void add(Observer observer); /*删除观察者*/ void del(Observer observer); /*通知所有的观察者*/ void notifyObservers(); /*自身的操作*/ void operation(); } /** * 主题辅助类 */ public abstract class AbstractSubject implements Subject { private Vector<Observer> vector = new Vector<Observer>(); @Override public void add(Observer observer) { vector.add(observer); } @Override public void del(Observer observer) { vector.remove(observer); } @Override public void notifyObservers() { Enumeration<Observer> enumo = vector.elements(); while (enumo.hasMoreElements()) { enumo.nextElement().update(); } } } /** * 主题类 */ public class MySubject extends AbstractSubject { @Override public void operation() { System.out.println("update self!"); notifyObservers(); } } public class ObserverTest { public static void main(String[] args) { Subject sub = new MySubject(); sub.add(new Observer1()); sub.add(new Observer2()); sub.operation(); } }
输出:
update self!
observer1 has received!
observer2 has received!