什么是观察者模式?
观察者模式又称为发布订阅模式,是对象的行为模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监视者被观察者的状态,当被观察者的状态发生变化时,会通知所有观察者,并让其自动更新自己。
实现观察者模式步骤
1.定义被观察者
//被观察者需要继承Observable类 public class ProductList extends Observable{ private List<String> productList=null;//产品列表 private static ProductList instance;//类唯一实例 private ProductList() {}//构建方法私有化 /** * 取得唯一实例 * @return */ public static ProductList getInstance() { if(instance==null) { instance=new ProductList(); instance.productList=new ArrayList<String>(); } return instance; } /** * 增加观察者 * @param observer */ public void addProductListObserver(Observer observer) { this.addObserver(observer); } public void addProduct(String newProduct) { productList.add(newProduct); System.out.println("产品列表新增了产品:"+newProduct); //关键两行代码 this.setChanged();//设置被观察对象发生变化 this.notifyObservers(newProduct);//通知观察者,并传递新产品,让观察者发生相应变化 } }
2.定义观察者
//观察者需要实现Observer接口并重写update方法 public class JingDongObserver implements Observer { @Override public void update(Observable o, Object product) { // TODO Auto-generated method stub String newProduct=(String)product; System.out.println("发送新产品【"+newProduct+"】同步到京东商城"); } } public class TaoBaoObserver implements Observer { @Override public void update(Observable o, Object product) { // TODO Auto-generated method stub String newProduct=(String)product; System.out.println("发送新产品【"+newProduct+"】同步到淘宝商城"); } }
3.测试
public static void main(String[] args) { // TODO Auto-generated method stub ProductList observable=ProductList.getInstance(); TaoBaoObserver taoBaoObserver=new TaoBaoObserver(); JingDongObserver jingDongObserver=new JingDongObserver(); observable.addObserver(jingDongObserver); observable.addObserver(taoBaoObserver); //产品列表新增一件产品就能同时被不同的电商上架 observable.addProduct("新增产品1"); }
产品列表新增了产品:新增产品1
发送新产品【新增产品1】同步到淘宝商城
发送新产品【新增产品1】同步到京东商城