SSM框架中用到的设计模式-观察者模式
观察者模式
这种模式定义了一种一对多的依赖关系,让多个观察者对象同时监视着被观察者的状态,当被观察者的状态发生变化,会通知所有观察者,让其自动更新自己。
理解:和函数y=x的平方一样,y随着x的变化而变化
实例
在java中继承java.util.Observable类,成为被观察者
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 addProudct(String newProduct){
productList.add(newProduct);
System.out.println("产品列表新增了产品"+newProduct);
//设置被观察对象发生变化
this.setChanged();
//通知观察者,并且传递新的产品
this.notifyObservers(newProduct);
}
}
上面被观察者的功能:
- 构造方法私有化,避免通过new对象,而是通过getInstance方法获取对象
- addProductListObserver可以增加一个电商接口
- addProudct方法,在产品列表中添加一个新品,然后调用setChanged方法告知观察者当前被观察者发生改变,最后通过notifyObservers方法告诉观察者,并将新产品作为参数传递给观察者。
编写观察者,需要通过java.util.Observer接口的update方法:
//京东电商接口
public class JingDongObserver implements Observer{
@Override
public void update(Observable o,Object product){
String newProduct=(String)product;
System.out.println("发送新品:"+newproduct+"同步到京东商城");
}
}
//淘宝电商接口
public class TaoBaoObserver implements Observer{
@Override
public void update(Observable o,Object product){
String newProduct=(String)product;
System.out.println("发送新品:"+newproduct+"同步到淘宝商城");
}
}
测试代码:
public class Test{
public static void main(String[] args){
ProductList observable=ProductList.getInstance();
TaoBaoObserver taoBaoObserver=new TaoBaoObserver();
JingDongObserver jingDongObserver=new JingDongObserver();
//被观察者添加观察者对象,当被观察者发生变化会通知观察者
observable.addObserver(taoBaoObserver);
observable.addObserver(jingDongObserver);
observable.addProudct("新增产品1");
}
}