" />

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

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)聽模式簡單來說就是事件源經(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ā)生的地方,由于事件源的某項(xiàng)屬性或狀態(tài)發(fā)生了改變,

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

事件監(jiān)聽器

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

package java.util;
public interface EventListener {
}

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

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

舉個(gè)粒子

事件對象

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("鼠標(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)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    spring自定義注解及使用方法詳細(xì)例子

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

    使用SpringCloud Gateway解決跨域問題

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

    springboot使用事物注解方式代碼實(shí)例

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

最新評論

买车| 洞口县| 门头沟区| 无棣县| 邮箱| 二手房| 岳阳县| 中宁县| 玉树县| 通城县| 碌曲县| 宜昌市| 巴中市| 磴口县| 察雅县| 大姚县| 湟源县| 和政县| 唐山市| 鄄城县| 潜江市| 象州县| 红安县| 六安市| 奎屯市| 乳山市| 客服| 武穴市| 互助| 炎陵县| 宜兰市| 乐平市| 德庆县| 巴楚县| 石阡县| 阿克| 霍山县| 清新县| 乡宁县| 舞钢市| 汕尾市|