• 观察者设计模式


    前言:

      从现实角度来说,我们每一个人都是一个观察者,同时也是一个被观察者。

      作为被观察;者,我们会发出一些信息,观察者在接收到这些信息后,会做出相应的反映;而作为观察者,我们是可以被“被观察者”所发出的信息影响的。

      一个被观察者,可能存在多个观察者。也就是说,一个被观察者所发出的信息,可能会影响到多个观察者。

      观察者设计模式:

        定义了一种一对多的关联关系。一个对象A与多个对象B、C、D之间建立“被观察与观察关系”。

        当对象A的状态发生改变时,通知所有观察者对象B、C. D。当观察者对象B、c、D在接收到A的通知后,根据自身实际情况,做出相应改变。

        当然,观察者与被观察者指的都是具有某一类功能的对象、

    结构说明:

     代码:

    IObserved:

    public interface IObserved {
        /**
         * 接收数据信息
         * @param demo
         */
        void shuJu(String demo);
    }

    IBeObserved:

    public interface IBeObserved {
        /**
         * 添加观察者的方法
         * @param observed
         */
        void addObserved(IObserved observed);
    
        /**
         * 删除观察者的方法
         * @param observed
         */
        void removeObserved(IObserved observed);
    
        /**
         * 向观察者发送消息的方法
         * @param data
         */
        void sendObserved(String data);
    }

    OneBeserved:

    public class OneObserved implements IObserved {
        @Override
        public void shuJu(String demo) {
            System.out.println("一号观察者正在处理信息:" + demo);
        }
    }

    TwoBeserved:

    public class TwoObserved implements IObserved {
        @Override
        public void shuJu(String demo) {
            System.out.println("二号观察者正在处理信息:" + demo);
        }
    }

    BeObserverSimp:

    public class BeObserverSimp implements IBeObserved {
        /**
         * 定义观察者集合/
         */
        List<IObserved> list;
    
        public BeObserverSimp() {
            //在被观察者创建的时候,就创建观察者集合
            list = new ArrayList<>();
        }
    
        @Override
        public void addObserved(IObserved observed) {
            list.add(observed);
        }
    
        @Override
        public void removeObserved(IObserved observed) {
            list.remove(observed);
        }
    
        @Override
        public void sendObserved(String data) {
            //遍历集合调用每个观察者中的方法
            for (IObserved observed : list) {
                observed.shuJu(data);
            }
        }
    }

    测试类:

    /**
     * @author zhangzhixi
     */
    public class Test {
        public static void main(String[] args) {
            //创建观察者
            OneObserved one = new OneObserved();
            TwoObserved two = new TwoObserved();
            //创建被观察者
            BeObserverSimp bos = new BeObserverSimp();
            //添加一号跟二号观察者
            bos.addObserved(one);
            bos.addObserved(two);
            //删除一号观察者
            bos.removeObserved(one);
            //向观察发送消息
            bos.sendObserved("你好世界!");
        }
    }

    测试结果:

  • 相关阅读:
    paste DEMO合并文件
    diff 文件比较
    grep DEMO
    tr DEMO
    uniq DEMO
    sort DEMO
    定义提示符 PS1 PS4
    MAVEN修改localRepository不起作用
    java数组初始化
    oracle监听服务无法打开
  • 原文地址:https://www.cnblogs.com/zhangzhixi/p/14157482.html
Copyright © 2020-2023  润新知