观察者模式

什么是观察者模式?

观察者模式又称为发布订阅模式,是对象的行为模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监视者被观察者的状态,当被观察者的状态发生变化时,会通知所有观察者,并让其自动更新自己。

实现观察者模式步骤

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】同步到京东商城
这样就不用一个一个添加产品,更利于扩展和维护。
posted @ 2020-02-27 17:44  马中赤兔  阅读(188)  评论(0编辑  收藏  举报