关于观察者模式的 个人理解

Posted 郝二驴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于观察者模式的 个人理解相关的知识,希望对你有一定的参考价值。

1. 观察者模式 实际上是一个被观察者 管理着所有的观察者, 一旦观察者有变化或者有动作, 要通知所有的观察者.

这样就要去观察者要抽象为一个接口或者抽象类了. 所有子类都要实现相同的方法. 被观察者变化时候, 遍历所有的观察者,执行观察者的方法

java 自有的观察者模式 :   观察者都要继承或者实现Observer接口 实现update方法.

                                        同时被观察者继承Obserrvable类 ,他已经帮忙实现了 add, delete notify 等方法了, 而且里面还做了多线程控制. 集合用的Vector

              自己的被观察者类只需要实现 需要通知所有观察者的方法即可.  

因为实际工作的是 观察者的update方法,是继承来的,参数也是固定的. 这样就没法传参数了

2.事件驱动模型, 感觉是我们工作中最常见的,

也就是 listener  和 event那一套

应用上 应该是说

定义一个事件 event 继承 EventObject 这个事件可以定义这个事件自己特有的属性, 事件需要加消息等?

定义一个接口 抽象listener 继承  EventListener  ,里面方法自己定义.;参数是具体事件对象

同时定义一个或者多个 listener实现类

因为是监听嘛, 肯定是要绑定到一个对象上.    这个对象应该就是相对于上面模式的被观察者, 事件发起者

定义对象, 对象里面包含一个或者多个Listener; 同时提供 set  和get方法  还有add方法.

接下来就是定义事件发起的方法了.   方法里面直接直接调用抽象的相对应的listener的方法,参数是相应的事件的new 对象. 可以将参数 赋予事件对象的构造器去初始化.

 

整个事件驱动就定义完成了. 

 

接下来就是 客户端调用了.  调用的时候, 先初始化对象,  同时 为对象绑定监听,listener. 就是就提listener的实现类. 这样就好了 

初始化时候 可以直接用匿名内部类就好了 

button.setOnclick(new ClickListener() {//我们给按钮注册点击监听器
            //按钮被点,我们就验证后提交
            public void click(ClickEvent clickEvent) {
                System.out.println("--------单击事件代码---------");
                System.out.println("if(‘表单合法‘){");
                System.out.println("\t表单提交");
                System.out.println("}else{");
                System.out.println("\treturn false");
                System.out.println("}");
            }
        });

 

 

接下来就是调用了相应方法就会触发监听了.

 

以上是关于关于观察者模式的 个人理解的主要内容,如果未能解决你的问题,请参考以下文章

关于代理模式的个人理解

关于建造者模式的个人理解

关于Hystrix超时机制和线程状态的测试观察和个人理解

最简的发布订阅模式

几个关于js数组方法reduce的经典片段

无法理解观察者模式中的一些代码