观察者模式
观察者模式
观察者模式又称为发布订阅模式,是对象的行为模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监视一个被观察者的状态,当被观察者的状态发生变化时,会通知所有观察者,并让其自动更新。
举一个生活中的例子来说明:一个商家有一些产品,它和一些电商合作,每当有新产品时,就会把这些产品推送到电商。其中商家的产品就是被观察者,而这些电商就是观察者。
产品列表类(被观察者)
package com.hlbdx.observable;
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() {
}
// 获取唯一实例
// 使用单例模式
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);
}
// 新增产品
public void addProduct(String newProduct) {
productList.add(newProduct);
System.out.println("产品列表新增产品:" + newProduct);
// 设置被观察对象发生变化
this.setChanged();
// 通知观察者,并传递新产品
this.notifyObservers(newProduct);
}
}
京东电商(观察者1)
package com.hlbdx.observable;
import java.util.Observable;
import java.util.Observer;
public class JingDongObserver implements Observer {
public void update(Observable o, Object product) {
String newProduct = (String) product;
System.out.println("发送新产品【“" + newProduct + "”】同步到京东商城");
}
}
淘宝电商(观察者2)
package com.hlbdx.observable;
import java.util.Observable;
import java.util.Observer;
public class TaoBaoObserver implements Observer {
public void update(Observable o, Object product) {
String newProduct = (String) product;
System.out.println("发送新产品【“" + newProduct + "”】同步到淘宝商城");
}
}
测试类
package com.hlbdx.observable;
public class TestObserver {
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("蓝珀基尼");
}
}