zoukankan      html  css  js  c++  java
  • 设计模式

    /**
     * 观察者模块
     * @author swt
     */
    public interface Observer {
    
        /**
         * 更新数据
         */
        void update();
    }
    

      

    /**
     * 显示观察者
     * @author swt
     */
    public class DisplayObserver implements Observer {
        @Override
        public void update() {
            System.out.println("DisplayObserver.update");
        }
    }
    

      

    /**
     * 主题对象有3个基础操作:注册新的观察者、通知所有观察者更新数据、移除取消观察的观察者对象。
     * @author swt
     */
    public interface Subject {
    
        /**
         * 注册观察者
         * @param observer  观察者
         */
        void addObserver(Observer observer);
    
        /**
         * 移除观察者
         * @param observer  观察者
         */
        void removeObserver(Observer observer);
    
        /**
         * 通知所有观察者
         */
        void notifyObservers();
    
    }
    

      

    /**
     * 状态主题
     * @author swt
     */
    public class RelayStateSubject implements Subject {
    
        private List<Observer> observerList;
    
        private RelayStateSubject(){
            observerList = new ArrayList<>();
            System.out.println("RelayStateSubject.RelayStateSubject");
        }
    
        static class RelayStateSubjectHolder {
            private static final RelayStateSubject INSTANCE = new RelayStateSubject();
        }
    
        public static RelayStateSubject getInstance() {
            return RelayStateSubjectHolder.INSTANCE;
        }
    
        @Override
        public void addObserver(Observer observer) {
            observerList.add(observer);
            System.out.println("RelayStateSubject.addObserver");
        }
    
        @Override
        public void removeObserver(Observer observer) {
            observerList.remove(observer);
            System.out.println("RelayStateSubject.removeObserver");
        }
    
        @Override
        public void notifyObservers() {
            for (Observer o : observerList) {
                if(null == o) {
                    continue;
                }
                o.update();
            }
            System.out.println("RelayStateSubject.notifyObservers");
        }
    
        /**
         * 改变状态
         */
        public void changeState() {
            notifyObservers();
        }
    }
    

      

    public class Main {
        public static void main(String[] args) {
            RelayStateSubject relayStateSubject = RelayStateSubject.getInstance();
            relayStateSubject.addObserver(new DisplayObserver());
            relayStateSubject.changeState();
            System.out.println("Main.main");
        }
    }
    

     输出

    RelayStateSubject.RelayStateSubject
    RelayStateSubject.addObserver
    DisplayObserver.update
    RelayStateSubject.notifyObservers
    Main.main
    

      

     

  • 相关阅读:
    PHPCMS V9 导航栏当前栏目高亮
    phpcms v9栏目列表调用每一篇文章内容方法
    PHPCMS V9 为今天或几天前文章加new
    vue.js路由参数简单实例讲解------简单易懂
    vue组件知识总结
    vue.js 利用组件之间通讯,写一个弹出框例子
    vue.js组件之间通讯--父组件调用子组件的一些方法,子组件暴露一些方法,让父组件调用
    vue.js组件之间的通讯-----父亲向儿子传递数据,儿子接收父亲的数据
    vue.js通讯----父亲拿儿子的数据
    git常见操作---由简入深
  • 原文地址:https://www.cnblogs.com/song-wentao/p/7728796.html
Copyright © 2011-2022 走看看