" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設計模式的事件模型詳解

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

監(jiān)聽模式

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

參與的角色

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

事件

事件繼承自java.util.EventObject類,封裝了事件源對象及跟事件相關的信息,代碼可以說是很簡單了。

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接口,注冊在事件源上,當事件源的屬性或狀態(tài)改變時,取得相應的監(jiān)聽器調用其內(nèi)部的回調方法。最簡單的代碼,沒有之一。

package java.util;
public interface EventListener {
}

事件、事件源、監(jiā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("鼠標事件回調被執(zhí)行了---");
            System.out.println("當前線程名稱:"+Thread.currentThread().getName());
        });
        source.handle();
    }
}

執(zhí)行結果

在這里插入圖片描述

總結

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

相關文章

  • Java中日期與時間的處理及工具類封裝詳解

    Java中日期與時間的處理及工具類封裝詳解

    在項目開發(fā)中免不了有對日期時間的處理,但Java中關于日期時間的類太多了,本文就來介紹一下各種類的使用及我們項目中應該怎么選擇吧
    2023-07-07
  • 使用Java自定義注解實現(xiàn)一個簡單的令牌桶限流器

    使用Java自定義注解實現(xiàn)一個簡單的令牌桶限流器

    限流是在分布式系統(tǒng)中常用的一種策略,它可以有效地控制系統(tǒng)的訪問流量,保證系統(tǒng)的穩(wěn)定性和可靠性,在本文中,我將介紹如何使用Java自定義注解來實現(xiàn)一個簡單的令牌桶限流器,需要的朋友可以參考下
    2023-10-10
  • Java SE實現(xiàn)多人聊天室功能

    Java SE實現(xiàn)多人聊天室功能

    這篇文章主要為大家詳細介紹了Java SE實現(xiàn)多人聊天室功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 淺析Spring?中?Bean?的理解與使用

    淺析Spring?中?Bean?的理解與使用

    這篇文章主要介紹了Spring?中?Bean?的理解與使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Java性能優(yōu)化技巧匯總

    Java性能優(yōu)化技巧匯總

    這篇文章主要介紹了Java性能優(yōu)化技巧,匯總了提升java程序性能的常用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • mybatis和mybatisplus批量插入問題示例詳解

    mybatis和mybatisplus批量插入問題示例詳解

    最近在處理一個功能的時候,需要批量插入數(shù)據(jù),這篇文章主要給大家介紹了關于mybatis和mybatisplus批量插入問題的相關資料,文中通過實例代碼介紹非常詳細,需要的朋友可以參考下
    2023-04-04
  • Java 獲取當前系統(tǒng)時間的三種方法

    Java 獲取當前系統(tǒng)時間的三種方法

    這篇文章主要介紹了Java 獲取當前系統(tǒng)時間的三種方法,幫助大家利用Java處理時間,感興趣的朋友可以了解下
    2020-10-10
  • spring自定義注解及使用方法詳細例子

    spring自定義注解及使用方法詳細例子

    這篇文章主要給大家介紹了關于spring自定義注解及使用方法的相關資料,Spring 是一個非常強大的框架,可以使用自定義注解來完成許多任務,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • 使用SpringCloud Gateway解決跨域問題

    使用SpringCloud Gateway解決跨域問題

    本文給大家介紹了使用SpringCloud Gateway解決跨域問題,Spring Cloud Gateway是一個基于Spring Framework的微服務網(wǎng)關,使用Spring Cloud Gateway的跨域配置能夠有效管理不同服務之間的通信,提高系統(tǒng)的可維護性和安全性,需要的朋友可以參考下
    2024-02-02
  • springboot使用事物注解方式代碼實例

    springboot使用事物注解方式代碼實例

    這篇文章主要介紹了springboot使用事物注解方式代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11

最新評論

子洲县| 天全县| 简阳市| 富阳市| 克拉玛依市| 景宁| 海丰县| 鹤岗市| 丹棱县| 吴忠市| 泸西县| 阿拉善左旗| 利辛县| 河南省| 东乡族自治县| 桐庐县| 阜新市| 廉江市| 怀安县| 莲花县| 七台河市| 盈江县| 搜索| 固阳县| 定南县| 乐昌市| 松桃| 永年县| 宁城县| 盐池县| 织金县| 龙游县| 拜泉县| 青浦区| 区。| 公主岭市| 调兵山市| 合阳县| 宜州市| 荔浦县| 报价|