美文网首页
观察者模式

观察者模式

作者: 爱我O就直说 | 来源:发表于2020-01-07 15:15 被阅读0次

    2020-01-07

    先看效果:
        //观察者模式 测试
        private void observerTest() {
            MyObserverble b = new MyObserverble();
            b.addObserver(new UserObserver("张三"));
            b.addObserver(new UserObserver("李四"));
            b.addObserver(new UserObserver("王麻子"));
            b.pushMssage();
            b.pushMssage("自定义消息");
            b.pushMssage(b.list.get(0), "给指定对象发消息");
        }
    
    
    ###输出结果:
    
    被观察者发出消息:默认消息
    张三收到消息:默认消息
    李四收到消息:默认消息
    王麻子收到消息:默认消息
    被观察者发出消息:自定义消息
    张三收到消息:自定义消息
    李四收到消息:自定义消息
    王麻子收到消息:自定义消息
    被观察者发出消息:给指定对象发消息
    张三收到消息:给指定对象发消息
    

    开始写:

    观察者:

    /**
     * 观察者接口
     */
    interface BObserver {
    
        void update(Object o);
    
    }
    
    /**
     * 具体 观察者
     */
    public class UserObserver implements BObserver {
        private String name;
    
        public UserObserver() {
        }
    
        public UserObserver(String name) {
            this.name = name;
        }
    
        @Override
        public void update(Object o) {
            System.out.println(this.name + "收到消息:" + o);
        }
    
        @Override
        public String toString() {
            return "UserObserver{" + "name='" + name + '\'' + '}';
        }
    
    }
    

    被观察者:

    /**
     * 被观察者接口
     */
    public interface BObserverble {
    
        BObserverble addObserver(BObserver o);
    
        BObserverble removeObserver(BObserver o);
    
        void pushMssage();
    }
    
    
    /**
     * 具体 被观察者
     */
    public class MyObserverble implements BObserverble {
        //观察者清单
        List<BObserver> list = new ArrayList<>();
    
        @Override
        public BObserverble addObserver(BObserver o) {
            list.add(o);
            return this;
        }
    
        @Override
        public BObserverble removeObserver(BObserver o) {
            list.remove(o);
            return this;
        }
    
        @Override
        public void pushMssage() {
            pushMssage("默认消息");
        }
    
        /**
         * 发送消息
         *
         * @param message 发送的消息内容
         */
        public void pushMssage(String message) {
            System.out.println("被观察者发出消息:" + message);
            for (BObserver o : list) {
                o.update(message);
            }
        }
    
        /**
         * 给指定对象 发送消息
         *
         * @param message 发送的消息内容
         */
        public void pushMssage(BObserver bObserver, String message) {
            System.out.println("被观察者发出消息:" + message);
            for (BObserver o : list) {
                if (o == bObserver) o.update(message);
            }
        }
    
    }
    

    完事儿

    相关文章

      网友评论

          本文标题:观察者模式

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