简单理解观察者模式

来源:互联网 发布:系统格式化数据恢复 编辑:程序博客网 时间:2024/05/22 11:49

观察者模式是一种一对多的依赖关系,设置了多个观察者对象来监视被观察对象的状态,当被观察对象发生变化时候,通知所有观察对象来相应这种变化。 Observable 被观察对象需要继承此类,以下方法均为此类方法            1. 新增观察者方法     addObserve            2. 标志被观察者变化    setChange            3. 告知观察者          notifyObservers  Observer  观察者需要实现这个接口,并且实现其中的update方法作为当被观察者发生变化时候的响应。

下面提供一个例子

存在一个供货商为淘宝和京东供货,我们认为供货商为被观察对象,

当新增一种产品时,作为观察者对象的淘宝和京东也要将新增产品上架销售。

被观察者代码:

import java.util.ArrayList;import java.util.List;import java.util.Observable;import java.util.Observer;public class ProductList extends Observable {private List<String> productList = null; //产品列表private static ProductList instance; //类的唯一实例private ProductList(){}; //构造方法私有化,不允许在类外new对象/** * 取得了唯一实例,单例模式。 * @return */public static ProductList getInstance(){if(instance == null){instance = new ProductList();instance.productList = new ArrayList<String>();}return instance;}/** * 新增观察者接口 */public void addProductListObserver(Observer observer){this.addObserver(observer);}/** * 新增产品 * 核心方法为: * setChanged 设置内部标志,指示被观察对象发生变化。 * notifyObservers 通知各个观察者对象。 */public void addProduct(String newProduct){productList.add(newProduct);this.setChanged();//设置被观察对象发生变化this.notifyObservers(newProduct);//通知观察者,并传递新产品}}

观察者代码
import java.util.Observable;import java.util.Observer;public class TaoBaoObserver implements Observer {@Overridepublic void update(Observable o, Object Product) {String newProduct = (String) Product;System.out.println("TB新增产品:" +newProduct);}}import java.util.Observable;import java.util.Observer;public class JingDongObserver implements Observer {@Overridepublic void update(Observable o, Object Product) {String newProduct = (String) Product;System.out.println("JD新增产品:" +newProduct);}public static void main(String[] args) {ProductList observable = ProductList.getInstance(); // 创建被观察对象JingDongObserver jdObserver = new JingDongObserver();TaoBaoObserver tbObserver = new TaoBaoObserver();observable.addObserver(jdObserver);observable.addObserver(tbObserver);observable.addProduct("新增产品1");}}



原创粉丝点击