• Java: Observer Patterns


    /**
     * 版权所有 2022 涂聚文有限公司
     * 许可信息查看:
     * 描述:
     * 观察者模式 Observer Patterns 也叫做发布 -订阅模式(Publist/Subscribe)模型-视图模式(Model/View),源-监听器(Source/Listener)或从属者模式(Dependents)
     * 历史版本: JDK 14.02
     * 2022-09-12 创建者 geovindu
     * 2022-09-12 添加 Lambda
     * 2022-09-12 修改:date
     * 接口类
     * 2022-09-12 修改者:Geovin Du
     * 生成API帮助文档的指令:
     *javadoc - -encoding Utf-8 -d apidoc Observer.java
     *
     * */
    
    package com.javapatterns.observer;
    
    
    /**
     *
     * @author geovindu
     * @version  1.0
     * */
    public interface Observer {
    
        /**
         * 谳用这个方法会更新自已
         *
         * */
        void update();
    }
    

      

    /**
     * 版权所有 2022 涂聚文有限公司
     * 许可信息查看:
     * 描述:
     * 观察者模式 Observer Patterns 也叫做发布 -订阅模式(Publist/Subscribe)模型-视图模式(Model/View),源-监听器(Source/Listener)或从属者模式(Dependents)
     * 历史版本: JDK 14.02
     * 2022-09-12 创建者 geovindu
     * 2022-09-12 添加 Lambda
     * 2022-09-12 修改:date
     * 接口类
     * 2022-09-12 修改者:Geovin Du
     * 生成API帮助文档的指令:
     *javadoc - -encoding Utf-8 -d apidoc Subject.java
     *
     * */
    
    
    package com.javapatterns.observer;
    
    import java.util.Vector;
    import java.util.Enumeration;
    
    /**
     *
     * @author geovindu
     * @version  1.0
     * */
    abstract  public class Subject {
    
        /**
         *
         * */
        private Vector observersVector = new java.util.Vector();
        /**
         *登记一个新的观察者对象
         *
         * */
        public void attach(Observer observer)
        {
            observersVector.addElement(observer);
            System.out.println("Attached an observer.");
        }
        /**
         *删除一个新的观察者对象
         * */
        public void detach(Observer observer)
        {
            observersVector.removeElement(observer);
        }
        /**
         *登记过的观察者对象
         *
         * */
        public void notifyObservers()
        {
            java.util.Enumeration enumeration = observers();
            while (enumeration.hasMoreElements())
            {
                System.out.println("Before notifying");
                ((Observer)enumeration.nextElement()).update();
            }
        }
        /**
         *聚集对象
         *
         * */
        public Enumeration observers()
        {
            return ((java.util.Vector) observersVector.clone()).elements();
        }
    }
    

      

    /**
     * 版权所有 2022 涂聚文有限公司
     * 许可信息查看:
     * 描述:
     * 观察者模式 Observer Patterns 也叫做发布 -订阅模式(Publist/Subscribe)模型-视图模式(Model/View),源-监听器(Source/Listener)或从属者模式(Dependents)
     * 历史版本: JDK 14.02
     * 2022-09-12 创建者 geovindu
     * 2022-09-12 添加 Lambda
     * 2022-09-12 修改:date
     * 接口类
     * 2022-09-12 修改者:Geovin Du
     * 生成API帮助文档的指令:
     *javadoc - -encoding Utf-8 -d apidoc ConcreteObserver.java
     *
     * */
    package com.javapatterns.observer;
    /**
     *
     * @author geovindu
     * @version  1.0
     * */
    public class ConcreteObserver implements Observer{
    
        /**
         *
         *
         * */
        public void update()
        {
            System.out.println("I am notified");
        }
    }
    

      

    /**
     * 版权所有 2022 涂聚文有限公司
     * 许可信息查看:
     * 描述:
     * 观察者模式 Observer Patterns 也叫做发布 -订阅模式(Publist/Subscribe)模型-视图模式(Model/View),源-监听器(Source/Listener)或从属者模式(Dependents)
     * 历史版本: JDK 14.02
     * 2022-09-12 创建者 geovindu
     * 2022-09-12 添加 Lambda
     * 2022-09-12 修改:date
     * 接口类
     * 2022-09-12 修改者:Geovin Du
     * 生成API帮助文档的指令:
     *javadoc - -encoding Utf-8 -d apidoc ConcreteSubject.java
     *
     * */
    
    package com.javapatterns.observer;
    /**
     *
     * @author geovindu
     * @version  1.0
     * */
    public class ConcreteSubject extends Subject{
    
        /**
         *
         * */
        private String state;
        /**
         *
         * */
        public void change(String newState)
        {
            state = newState;
    
            this.notifyObservers();
        }
    }
    

      

    调用测试:

                //观察者模式
                ConcreteSubject subject;
                com.javapatterns.observer.Observer observer;
                subject = new ConcreteSubject();
                observer = new ConcreteObserver();
                subject.attach(observer);
                subject.change("new state");
    

      

    输出:

    Attached an observer.
    Before notifying
    I am notified
    

      

  • 相关阅读:
    ajax加载数据字典下拉选后台
    【算法】二叉树前中后序的递归+迭代(java代码)
    【设计模式】代理模式与装饰器模式的区别
    《重构》读书笔记(一)
    【服务器安全】记一次处理挖矿病毒经历
    【计算机原理】数值存储计算基本理论(一)
    【JAVA】java中类的执行顺序
    【numpy&pandas】Pandas速查笔记
    【前端】打包vue项目到nginx过程
    【服务器搭建】Linux下安装docker
  • 原文地址:https://www.cnblogs.com/geovindu/p/16724869.html
Copyright © 2020-2023  润新知