Java设计模式_观察者模式

观察者(Observer)模式又称发布订阅模式,是对象的行为模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监视着被观察者的状态,当被观察者的状态发生变化时,会通知所有观察者,并让其自动更新自己。
多个对象(电商接口)监听一个对象(产品列表),当被监听者(产品列表)发生变化时,监听者(电商接口)就会触发一定当行为以适合变化的逻辑模式,我们称为观察者模式。这样的好处在于,程序中不在出现if语句,观察者会根据观察对象的变化而做出对应的行为。


被观察者:

package com.wlz;

import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;

/**
 * @author zhiqiang zhang
 * @create 2019-02-14-11:18
 **/
public class ProductList extends Observable {
    private List<String> productList=null;//产品列表
    private static ProductList instance;//类唯一实例

    /**
     * 构造方法私有化,避免通过new新建对象,而是通过getInstance方法获得产品列表单例
     */
    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);
    }

    /**
     * 新增产品
     * @param newProduct 新产品
     */
    public void addProduct(String newProduct){
        productList.add(newProduct);
        System.out.println("产品列表新增产品:"+newProduct);
        //调用setChanged方法,告知观察者当前被观察者发生了变化
        this.setChanged();//设置被观察对象发生变化
        //通过notifyObservers告知观察者,并让它们发生相应的动作,并将新产品作为参数传递给观察者
        this.notifyObservers(newProduct);//通知观察者,并传递新产品
    }
}

观察者一:

package com.wlz;

import java.util.Observable;
import java.util.Observer;

/**
 * @author zhiqiang zhang
 * @create 2019-02-14-14:39
 **/
public class JdServer implements Observer {

    @Override
    public void update(Observable o, Object product) {
        String newProduct=(String)product;
        System.out.println("发送新产品"+newProduct+"同步到京东商城。");
    }


}

观察者二:

package com.wlz;

import java.util.Observable;
import java.util.Observer;

/**
 * @author zhiqiang zhang
 * @create 2019-02-14-14:44
 **/
public class TbServer implements Observer {

    @Override
    public void update(Observable o, Object product) {
        String newProduct=(String)product;
        System.out.println("发送新产品"+newProduct+"同步到淘宝商城。");
    }
}

测试:

package com.wlz;

/**
 * @author zhiqiang zhang
 * @create 2019-02-14-14:48
 **/
public class TestObserver {
    public static void main(String[] args) {
        TestObserver.Test();
    }
    public static void Test(){
        ProductList productList=ProductList.getInstance();
        TbServer tbServer=new TbServer();
        JdServer jdServer=new JdServer();
        productList.addObserver(tbServer);
        productList.addProduct("商品1");
        productList.addObserver(jdServer);
        productList.addProduct("商品2");
    }
}

运行结果:

产品列表新增产品:商品1
发送新产品商品1同步到淘宝商城。
产品列表新增产品:商品2
发送新产品商品2同步到京东商城。
发送新产品商品2同步到淘宝商城。

猜你喜欢

转载自blog.csdn.net/zzq1824837536/article/details/87257529