" />

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

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

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

監(jiān)聽模式

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

參與的角色

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

事件

事件繼承自java.util.EventObject類,封裝了事件源對象及跟事件相關(guā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ā)生的地方,由于事件源的某項屬性或狀態(tài)發(fā)生了改變,

例如鼠標點擊事件。

事件監(jiān)聽器

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

package java.util;
public interface EventListener {
}

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

首先產(chǎn)生一個事件源(EventSource),然后事件(EventObject)封裝事件源信息和事件信息,事件發(fā)生,事件源注冊監(jiān)聽器,通知監(jiā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 + "]";
    }
}

事件對象Event繼承EventObject,封裝了事件源

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

事件源,事件源注冊了事件監(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);
}

測試

public class Test {
    public static void main(String[] args) {
        Source source = new Source();
        source.setName("鼠標點擊");
        System.out.println(source.getName());
        source.registerEventListener((event) -> {//這里是處理邏輯
            System.out.println("鼠標事件回調(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攔截的實現(xiàn)示例

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

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

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

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

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

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

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

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

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

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

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

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

    servlet重定向詳解(八)

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

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

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

    shiro 認證流程操作

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

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

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

最新評論