SSM框架中用到的设计模式-观察者模式

本文介绍了SSM框架中观察者模式的使用,通过一个产品列表类作为被观察者,当产品列表发生变化时,通知京东和淘宝电商接口这两个观察者进行同步更新。示例展示了如何创建被观察者、定义观察者接口以及测试代码,揭示了观察者模式在实际开发中的作用。
摘要由CSDN通过智能技术生成

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);     
    }
}

​ 上面被观察者的功能:

  1. 构造方法私有化,避免通过new对象,而是通过getInstance方法获取对象
  2. addProductListObserver可以增加一个电商接口
  3. 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");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值