" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java設(shè)計(jì)模式的事件模型詳解

 更新時(shí)間:2022年03月17日 11:41:39   作者:一只懶惰的小蟲子  
這篇文章主要為大家詳細(xì)介紹了Java設(shè)計(jì)模式的事件模型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

監(jiān)聽模式

事件模型實(shí)現(xiàn)了監(jiān)聽模式,監(jiān)聽模式簡(jiǎn)單來說就是事件源經(jīng)過事件的封裝傳給監(jiān)聽器,當(dāng)事件源觸發(fā)事件后,監(jiān)聽器接收到事件對(duì)象可以回調(diào)事件的方法。

參與的角色

事件模型有三種角色參與,分別是:事件源、事件、事件監(jiān)聽器。

事件

事件繼承自java.util.EventObject類,封裝了事件源對(duì)象及跟事件相關(guān)的信息,代碼可以說是很簡(jiǎn)單了。

public class EventObject implements java.io.Serializable {
    /**
     * 事件源
     */
    protected transient Object source;
    public EventObject(Object source) {
        if (source == null)
            throw new IllegalArgumentException("null source");
        this.source = source;
    }
    public Object getSource() {
        return source;
    }
    public String toString() {
        return getClass().getName() + "[source=" + source + "]";
    }
}

事件源

事件源是事件發(fā)生的地方,由于事件源的某項(xiàng)屬性或狀態(tài)發(fā)生了改變,

例如鼠標(biāo)點(diǎn)擊事件。

事件監(jiān)聽器

事件監(jiān)聽器實(shí)現(xiàn)java.util.EventListener接口,注冊(cè)在事件源上,當(dāng)事件源的屬性或狀態(tài)改變時(shí),取得相應(yīng)的監(jiān)聽器調(diào)用其內(nèi)部的回調(diào)方法。最簡(jiǎn)單的代碼,沒有之一。

package java.util;
public interface EventListener {
}

事件、事件源、監(jiān)聽器之間的關(guān)系

首先產(chǎn)生一個(gè)事件源(EventSource),然后事件(EventObject)封裝事件源信息和事件信息,事件發(fā)生,事件源注冊(cè)監(jiān)聽器,通知監(jiān)聽器,監(jiān)聽器處理事件。

舉個(gè)粒子

事件對(duì)象

public class EventObject implements java.io.Serializable {
    /**
     * 事件源
     */
    protected transient Object source;
    public EventObject(Object source) {
        if (source == null)
            throw new IllegalArgumentException("null source");
        this.source = source;
    }
    public Object getSource() {
        return source;
    }
    public String toString() {
        return getClass().getName() + "[source=" + source + "]";
    }
}

事件對(duì)象Event繼承EventObject,封裝了事件源

import java.util.EventObject;
public class Event extends EventObject {
    public Event(Object source) {
        super(source);
    }
}

事件源,事件源注冊(cè)了事件監(jiān)聽器

import java.util.HashSet;
import java.util.Set;
public class Source {
    private String name;
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    private final Set<Listener> listenerSet = new HashSet<>();
    public void registerEventListener(Listener eventListener) {
        if (eventListener != null) {
            listenerSet.add(eventListener);
        }
    }
    public void handle() {
        for (Listener eventListener : listenerSet) {
            Event event = new Event(this);
            eventListener.callback(event);
        }
    }
}

事件監(jiān)聽器

import java.util.EventListener;
public interface Listener extends EventListener {
    void callback(Event e);
}

測(cè)試

public class Test {
    public static void main(String[] args) {
        Source source = new Source();
        source.setName("鼠標(biāo)點(diǎn)擊");
        System.out.println(source.getName());
        source.registerEventListener((event) -> {//這里是處理邏輯
            System.out.println("鼠標(biāo)事件回調(diào)被執(zhí)行了---");
            System.out.println("當(dāng)前線程名稱:"+Thread.currentThread().getName());
        });
        source.handle();
    }
}

執(zhí)行結(jié)果

在這里插入圖片描述

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!  

相關(guān)文章

  • spring 重復(fù)注解和aop攔截的實(shí)現(xiàn)示例

    spring 重復(fù)注解和aop攔截的實(shí)現(xiàn)示例

    本文主要介紹了spring 重復(fù)注解和aop攔截的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • java實(shí)現(xiàn)簡(jiǎn)單猜數(shù)字

    java實(shí)現(xiàn)簡(jiǎn)單猜數(shù)字

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單猜數(shù)字,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Map按單個(gè)或多個(gè)Value排序當(dāng)Value相同時(shí)按Key排序

    Map按單個(gè)或多個(gè)Value排序當(dāng)Value相同時(shí)按Key排序

    Map可以先按照value進(jìn)行排序,然后按照key進(jìn)行排序。 或者先按照key進(jìn)行排序,然后按照value進(jìn)行排序,這樣操作都行,這篇文章主要介紹了Map按單個(gè)或多個(gè)Value排序,當(dāng)Value相同時(shí)按Key排序,需要的朋友可以參考下
    2023-02-02
  • 詳解使用Spring Boot的AOP處理自定義注解

    詳解使用Spring Boot的AOP處理自定義注解

    本篇文章主要介紹了詳解使用Spring Boot的AOP處理自定義注解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java Swing中的文本區(qū)(JTextArea)實(shí)現(xiàn)換行保存到文件的幾個(gè)方法

    Java Swing中的文本區(qū)(JTextArea)實(shí)現(xiàn)換行保存到文件的幾個(gè)方法

    這篇文章主要介紹了Java Swing中的文本區(qū)(JTextArea)實(shí)現(xiàn)換行保存到文件的幾個(gè)方法,本文給出了4種方法,需要的朋友可以參考下
    2014-10-10
  • 詳解Java的構(gòu)造方法及類的初始化

    詳解Java的構(gòu)造方法及類的初始化

    這篇文章主要為大家詳細(xì)介紹了Java的構(gòu)造方法及類的初始化,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,感興趣的小伙伴可以了解一下
    2022-08-08
  • servlet重定向詳解(八)

    servlet重定向詳解(八)

    這篇文章主要為大家詳細(xì)介紹了servlet重定向的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • java模擬實(shí)現(xiàn)銀行ATM機(jī)操作

    java模擬實(shí)現(xiàn)銀行ATM機(jī)操作

    這篇文章主要為大家詳細(xì)介紹了java模擬實(shí)現(xiàn)銀行ATM機(jī)操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • shiro 認(rèn)證流程操作

    shiro 認(rèn)證流程操作

    這篇文章主要介紹了shiro 認(rèn)證操作的相關(guān)資料,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • Spring Boot中單例類實(shí)現(xiàn)對(duì)象的注入方式

    Spring Boot中單例類實(shí)現(xiàn)對(duì)象的注入方式

    這篇文章主要介紹了Spring Boot中單例類實(shí)現(xiàn)對(duì)象的注入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論