1 观察者模式又称发布订阅模式,是对象的行为模式.观察者模式定义了一种一对多的依赖关系,让多个观察者同时监视着被观察者的状态,当观察者的状态发生变化时,会通知所有观察者,并让其自动更新自己.
2 代码实例
1)被观察者
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
/**
* @Author:musi
* @Date:2019/9/13
* @Description:
*/
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 addProductgListObserver(Observer observer){
this.addObserver(observer);
}
public void addProduct(String newProduct){
productList.add(newProduct);
System.out.println("产品列表新增了产品:"+newProduct);
this.setChanged();
this.notifyObservers(newProduct);
}
}
2)观察者
import java.util.Observable;
import java.util.Observer;
/**
* @Author:musi
* @Date:2019/9/13
* @Description:
*/
public class JingdongObserver implements Observer {
@Override
public void update(Observable o, Object product) {
String newProduct = (String)product;
System.out.println("发送新产品["+newProduct+"]同步到京东商城");
}
}
import java.util.Observable;
import java.util.Observer;
/**
* @Author:musi
* @Date:2019/9/13
* @Description:
*/
public class TaobaoObserver implements Observer {
@Override
public void update(Observable o, Object product) {
String newProduct = (String)product;
System.out.println("发送新产品["+newProduct+"]同步到淘宝商城");
}
}
3)测试类
public class TestObserver {
public static void main(String[] args) {
ProductList productList = ProductList.getInstance();
TaobaoObserver taobaoObserver = new TaobaoObserver();
JingdongObserver jingdongObserver = new JingdongObserver();
productList.addObserver(taobaoObserver);
productList.addObserver(jingdongObserver);
productList.addProduct("宇宙飞船");
}
}
4)测试结果
产品列表新增了产品:宇宙飞船
发送新产品[宇宙飞船]同步到京东商城
发送新产品[宇宙飞船]同步到淘宝商城