观察者模式:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
举个栗子:
在京东买过东西的都知道,商品详情页有个“降价通知”。顾客甲告诉京东:“在这个商品降价时通知我啊”;客户乙也告诉京东:“在这个商品降价时通知我啊”。那么当这个商品降价时,京东就会通知客户甲和客户乙。
京东的这个商品就是一个主题,客户甲和客户乙就是一个观察者。当主题发生变化时,分别通知所有观察者变化的信息。
当客户乙已经买了这个商品,不想再接收这个通知了,那么他会告诉京东:“这个商品降价不用通知我了,我已经买了”。那么京东就会将客户乙这个观察者从观察者列表中删掉,以后就不会通知这个观察者了。
实现:
主题接口:
public interface Subject { // 加入观察者列表 registerObserver(Observer o); // 移除观察者 removeObserver(Observer o); // 通知观察者 notifyObservers(int paramA, string paramB, Object paramC);}
主题实现:
public class ConcreteSubject implement Subject { ArrayListobServerList = new ArrayList(); // 将观察者加入到观察者列表中 public void registerObServer(Observer o){...} // 将观察者从观察者列表中移除 public void removeObServer(Observer o){...} // 通知所有观察者 public void notifyObServer(int paramA, string paramB, Object paramC){ for (int i=0; i
定义观察者接口:
public interface ObServer { public void update(int paramA, string paramB, Object paramC);}
创建观察者:
public class ConcreteObServer { public void update(paramA, paramB, paramC) {...}}