如何實(shí)現(xiàn)Java監(jiān)聽(tīng)器詳解
一、前言
監(jiān)聽(tīng)器就是監(jiān)聽(tīng)事件源是否發(fā)生了某一個(gè)事件,當(dāng)發(fā)生指定監(jiān)聽(tīng)的事件時(shí)事件源會(huì)向已注冊(cè)的監(jiān)聽(tīng)器發(fā)送消息對(duì)象。監(jiān)聽(tīng)器可以獲得事件對(duì)象進(jìn)行相關(guān)操作。
二、監(jiān)聽(tīng)器模型
- 事件源: 發(fā)生事件的對(duì)象
- 消息:觸發(fā)監(jiān)聽(tīng)的某一個(gè)事件
- 監(jiān)聽(tīng)器:監(jiān)聽(tīng)發(fā)生的某個(gè)事件進(jìn)行業(yè)務(wù)處理

三、案例實(shí)現(xiàn)
在開(kāi)發(fā)者進(jìn)行開(kāi)發(fā)和學(xué)習(xí)之前進(jìn)行監(jiān)聽(tīng)處理業(yè)務(wù)邏輯。
DeveloperListener
package demo.listener;
/**
* 監(jiān)聽(tīng)器接口
* dingwen
* 2021/5/30 14:35
**/
public interface DeveloperListener {
/**
* 工作
*
* @param event 事件
*/
void work(Event event);
/**
* 研究
*
* @param event 事件
*/
void study(Event event);
}
Developer
package demo.listener;
import java.util.Optional;
import java.util.function.Supplier;
/**
* 開(kāi)發(fā)者類
* dingwen
* 2021/5/30 14:34
**/
public class Developer {
private DeveloperListener developerListener;
/**
* 注冊(cè)監(jiān)聽(tīng)器
*
* @param developerListener 開(kāi)發(fā)人員監(jiān)聽(tīng)器
*/
public void registerListener(DeveloperListener developerListener) {
this.developerListener = developerListener;
}
/**
* 工作
*/
public void work() {
if (developerListener != null) {
this.developerListener.work(new Event(this));
}
System.out.println("developer work");
}
/**
* 研究
*/
public void study(){
if (developerListener != null){
this.developerListener.study(new Event(this));
System.out.println("developer study");
}
}
}
Event
package demo.listener;
/**
* 事件對(duì)象
* dingwen
* 2021/5/30 14:32
**/
public class Event {
/**
* 開(kāi)發(fā)人員
*/
private Developer developer;
public Event(Developer developer) {
this.developer = developer;
}
public Event() {
}
public Developer getDeveloper() {
return developer;
}
public void setDeveloper(Developer developer) {
this.developer = developer;
}
}
DeveloperListenerImpl
package demo.listener;
/**
* developer listener impl
* dingwen
* 2021/5/30 14:38
**/
public class DeveloperListenerImpl implements DeveloperListener {
@Override
public void work(Event event) {
Developer developer = event.getDeveloper();
System.out.println("work developer impl listener");
}
@Override
public void study(Event event) {
Developer developer = event.getDeveloper();
System.out.println("study developer impl listener");
}
}
四、測(cè)試
package demo.listener;
/**
* 測(cè)試
* dingwen
* 2021/5/30 14:57
**/
public class ListenerTest {
public static void main(String[] args) {
Developer developer = new Developer();
developer.registerListener(new DeveloperListenerImpl());
developer.study();
developer.work();
}
}
到此這篇關(guān)于如何實(shí)現(xiàn)Java監(jiān)聽(tīng)器詳解的文章就介紹到這了,更多相關(guān)Java監(jiān)聽(tīng)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java實(shí)現(xiàn)監(jiān)聽(tīng)文件變化的三種方案詳解
- Java實(shí)現(xiàn)日志文件監(jiān)聽(tīng)并讀取相關(guān)數(shù)據(jù)的方法實(shí)踐
- Java 異步線程監(jiān)聽(tīng)與結(jié)果回調(diào)及異常捕獲總結(jié)分析
- Java 代碼實(shí)例解析設(shè)計(jì)模式之監(jiān)聽(tīng)者模式
- Java基礎(chǔ)學(xué)習(xí)之Swing事件監(jiān)聽(tīng)
- java實(shí)現(xiàn)emqx設(shè)備上下線監(jiān)聽(tīng)詳解
相關(guān)文章
Springboot-yaml配置和自動(dòng)配置原理分析
這篇文章主要介紹了Springboot-yaml配置和自動(dòng)配置原理分析,自動(dòng)配置原理是配置文件配置debug: true可以在控制臺(tái)打印自動(dòng)配置報(bào)告.可以打印所有的啟動(dòng)的自動(dòng)配置和沒(méi)有啟動(dòng)的自動(dòng)配置類,需要的朋友可以參考下2021-06-06
Mybatis 動(dòng)態(tài)sql if 判讀條件等于一個(gè)數(shù)字的案例
這篇文章主要介紹了Mybatis 動(dòng)態(tài)sql if 判讀條件等于一個(gè)數(shù)字的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
Java爬蟲(chóng)(Jsoup與WebDriver)的使用
這篇文章主要介紹了Java爬蟲(chóng)(Jsoup與WebDriver)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Java各種排序算法匯總(冒泡,選擇,歸并,希爾及堆排序等)
這篇文章主要介紹了Java各種排序算法,以大量實(shí)例形式匯總分析了Java常用的各種排序算法,包括冒泡排序、快速排序、堆排序、插入排序、希爾排序、選擇排序、歸并排序等,需要的朋友可以參考下2015-11-11
如何在Java中調(diào)用python文件執(zhí)行詳解
豐富的第三方庫(kù)使得python非常適合用于進(jìn)行數(shù)據(jù)分析,最近在項(xiàng)目中就涉及到j(luò)ava調(diào)用python實(shí)現(xiàn)的算法,下面這篇文章主要給大家介紹了關(guān)于如何在Java中調(diào)用python文件執(zhí)行的相關(guān)資料,需要的朋友可以參考下2022-05-05
Java深入了解數(shù)據(jù)結(jié)構(gòu)之哈希表篇
哈希表是一種根據(jù)關(guān)鍵碼去尋找值的數(shù)據(jù)映射結(jié)構(gòu),該結(jié)構(gòu)通過(guò)把關(guān)鍵碼映射的位置去尋找存放值的地方,說(shuō)起來(lái)可能感覺(jué)有點(diǎn)復(fù)雜,我想我舉個(gè)例子你就會(huì)明白了,最典型的的例子就是字典2022-01-01
Java動(dòng)態(tài)代理和反射機(jī)制詳解
這篇文章主要介紹了Java動(dòng)態(tài)代理和反射機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
PrintStream和PrintWriter的區(qū)別簡(jiǎn)介
這篇文章主要介紹了PrintStream和PrintWriter的區(qū)別簡(jiǎn)介,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01

