美文网首页Java 杂谈Java设计模式
Java设计模式之观察者模式

Java设计模式之观察者模式

作者: BestbpF | 来源:发表于2018-08-22 21:28 被阅读4次

    简述

    • 观察者模式又称为发布订阅模式,是对象的行为模式。观察者模式定义了一种一对多的依赖关系,多个观察者共同订阅着一个被观察者。当被观察者发生变化时,观察者们会做出相应的变化。
    • 在日常生活中,也有着观察者模式的案例。如一个产品列表被多个电商所订阅,每当这个产品列表有更新时,就需要向各大电商平台去推送新产品。
    • 在Java中实现观察者模式,被观察者需要继承java.util.Observable类,而观察者需要实现java.util.Observer的update方法

    代码示例

    本demo代码可到观察者模式中去下载
    【产品列表类】

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Observable;
    import java.util.Observer;
    
    public class ProductList extends Observable {
    
        private List<String> productList = null;//产品列表
    
        private static ProductList instance;//唯一实例
    
        private ProductList(){} //构建方法私有化,防止使用者去new对象
    
        /**
         * @return 产品列表唯一实例
         */
        public static ProductList getInstance(){
            if(instance == null){
                instance = new ProductList();
                instance.productList = new ArrayList<>();
            }
    
            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 + ",自动通知各大电商!");
            this.setChanged();//被观察者发生变化
            this.notifyObservers(newProduct);//通知观察者(各大电商),并传递新产品
        }
    }
    

    【京东】

    import java.util.Observable;
    import java.util.Observer;
    
    public class JingDongObserver implements Observer {
        @Override
        public void update(Observable o, Object product) {
            String newProduct = (String) product;
            System.err.println("发送新产品【" + newProduct + "】到京东商城");
        }
    }
    

    【淘宝】

    import java.util.Observable;
    import java.util.Observer;
    
    public class TaoBaoObserver implements Observer {
        @Override
        public void update(Observable o, Object product) {
            String newProduct = (String) product;
            System.err.println("发送新产品【" + newProduct + "】到淘宝商城");
        }
    }
    

    【测试】

    public class TestObserver {
        public static void main(String[] args) {
            ProductList productList = ProductList.getInstance();
            productList.addProductListObserver(new JingDongObserver());//京东订阅
            productList.addProductListObserver(new TaoBaoObserver());//淘宝订阅
            productList.addProduct("Java编程思想");
        }
    }
    

    【结果】


    运行结果

    相关文章

      网友评论

        本文标题:Java设计模式之观察者模式

        本文链接:https://www.haomeiwen.com/subject/wwhuiftx.html