Java中的事件监听模式

345 阅读2分钟

一、方法回调 1. 解释

// A方法调用B方法同时将,对象本身传递给B

比如b.method(this) // this 是 A对象。

//在B类中,通过A对象,调用其方法

比如a.method()

2. A调用B传入的也可以是一个接口类型,回调方法为静态方法

二、观察者模式

主题(被观察者)【接口/实现类】

观察者【接口/实现类】

  • Subject:抽象主题,它是用于抽象观察者的,因为主题对象需要管理所有依赖于它的观察者,所以必须对观察者抽象,才能实现统一的管理,提供接口注册和注销观察者
  • ConcreteSubject:具体主题,它用于具体实现主题对象,它会将有关状态存入具体的观察者对象,在具体主题数据发生变化时,会给所有已经注册的观察者发送通知
  • Observer:抽象观察者,它定义了一个接口,用于对观察者进行抽象
  • ConcreteObserver:具体观察者,实现抽象观察者接口,以便在得到主题对象的通知时更新自身数据

三、事件监听模式

  • Java中提供了基本的事件处理基类:
  1. EventObject:所有事件状态对象都将从其派生的根类;
  2. EventListener:所有事件侦听器接口必须扩展的标记接口
  • Java中的事件监听(GUI)
  1. 事件源相当于具体主题
  2. 事件监听器相当于具体观察者
  3. 事件作为参数传给事件监听器的方法,起到回调函数的作用

图片2.png

  • 首先创建事件源,并为其注册事件
  • 当调用setMsg方法修改事件源中的数据时,会调用notifyListener方法通知所有监听器
  • 在notifyListener方法中会遍历所有的监听器,创建事件对象,并作为参数传入监听器的事件处理方法(triggerEvent)
  • 监听器的triggerEvent方法会调用事件的回调方法(callback)
  • 回调方法用于编写具体的处理逻辑,比如输出内容给用户反馈

3. Spring中的事件简体(容器的各种事件)

  • ApplicationEvent:事件对象,继承至JDK的类EventObject ,可以携带事件的时间戳
  • ApplicationListener:事件监听器,继承至JDK的接口EventListener,该接口被所有的事件监听器实现,比如支持指定顺序的SmartApplicationListener
  • ApplicationEventMulticaster:事件管理者,管理监听器和发布事件,ApplicationContext通过委托ApplicationEventMulticaster来 发布事件
  • ApplicationEventPublisher:事件发布者,该接口封装了事件有关的公共方法,作为ApplicationContext的超级街廓,也是委托 ApplicationEventMulticaster完成事件发布。

参考:

zhuanlan.zhihu.com/p/375905161

www.cnblogs.com/admol/p/140…