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

java 實(shí)現(xiàn)回調(diào)代碼實(shí)例

 更新時(shí)間:2016年07月20日 16:41:02   投稿:lqh  
本文主要介紹Java的回調(diào)機(jī)制,并附實(shí)例代碼以供大家參考學(xué)習(xí),有需要的小伙伴可以看下

JAVA實(shí)現(xiàn)回調(diào)

熟悉MS-Windows和X Windows事件驅(qū)動(dòng)設(shè)計(jì)模式的開發(fā)人員,通常是把一個(gè)方法的指針傳遞給事件源,當(dāng)某一事件發(fā)生時(shí)來(lái)調(diào)用這個(gè)方法(也稱為“回調(diào)”)。Java的面向?qū)ο蟮哪P湍壳安恢С址椒ㄖ羔槪坪醪荒苁褂眠@種方便的機(jī)制。

Java支持interface,通過(guò)interface可以實(shí)現(xiàn)相同的回調(diào)。其訣竅就在于定義一個(gè)簡(jiǎn)單的interface,申明一個(gè)被希望回調(diào)的方法。

例如,假定當(dāng)某一事件發(fā)生時(shí)會(huì)得到通知,我們可以定義一個(gè)interface:

public interface InterestingEvent {
 // 這只是一個(gè)普通的方法,可以接收參數(shù)、也可以返回值
 public void interestingEvent();
}

這樣我們就有了任何一個(gè)實(shí)現(xiàn)了這個(gè)接口類對(duì)象的手柄grip。

當(dāng)一事件發(fā)生時(shí),需要通知實(shí)現(xiàn)InterestingEvent 接口的對(duì)象,并調(diào)用interestingEvent() 方法。

class EventNotifier {
 private InterestingEvent ie;
 private boolean somethingHappened;

 public EventNotifier(InterestingEvent event) {
  ie = event;
  somethingHappened = false;
  }
public void doWork() {
        if (somethingHappened) {
            // 事件發(fā)生時(shí),通過(guò)調(diào)用接口的這個(gè)方法來(lái)通知
            ie.interestingEvent();
        }       
    }
}

在這個(gè)例子中,用somethingHappened 來(lái)標(biāo)志事件是否發(fā)生。

希望接收事件通知的類必須要實(shí)現(xiàn)InterestingEvent 接口,而且要把自己的引用傳遞給事件的通知者。

public class CallMe implements InterestingEvent {
 private EventNotifier en;

 public CallMe() {
  // 新建一個(gè)事件通知者對(duì)象,并把自己傳遞給它
  en = new EventNotifier(this);
 }

 // 實(shí)現(xiàn)事件發(fā)生時(shí),實(shí)際處理事件的方法
 public void interestingEvent() {
  // 這個(gè)事件發(fā)生了,進(jìn)行處理
 }
}

以上是通過(guò)一個(gè)非常簡(jiǎn)單的例子來(lái)說(shuō)明Java中的回調(diào)的實(shí)現(xiàn)。

當(dāng)然,也可以在事件管理或事件通知者類中,通過(guò)注冊(cè)的方式來(lái)注冊(cè)多個(gè)對(duì)此事件感興趣的對(duì)象。

1. 定義一個(gè)接口InterestingEvent ,回調(diào)方法nterestingEvent(String event) 簡(jiǎn)單接收一個(gè)String 參數(shù)。

interface InterestingEvent {
 public void interestingEvent(String event);
}

2. 實(shí)現(xiàn)InterestingEvent接口,事件處理類

class CallMe implements InterestingEvent {
 private String name;
 public CallMe(String name){
  this.name = name;
 } 
 public void interestingEvent(String event) {
  System.out.println(name + ":[" +event + "] happened");
 }
}

3. 事件管理者,或事件通知者

class EventNotifier {
 private List<CallMe> callMes = new ArrayList<CallMe>();
 
 public void regist(CallMe callMe){
  callMes.add(callMe);
 }
 
 public void doWork(){
  for(CallMe callMe: callMes) {
   callMe.interestingEvent("sample event");
  }
 } 
}

4. 測(cè)試

public class CallMeTest {
 public static void main(String[] args) {
  EventNotifier ren = new EventNotifier();
  CallMe a = new CallMe("CallMe A");
  CallMe b = new CallMe("CallMe B");

  // regiest
  ren.regist(a);
  ren.regist(b);
  
  // test
  ren.doWork();  
 }
}

以上就是對(duì)Java回調(diào)機(jī)制的介紹,有需要的同學(xué)可以參考下。

相關(guān)文章

  • SpringSecurityOAuth2實(shí)現(xiàn)微信授權(quán)登錄

    SpringSecurityOAuth2實(shí)現(xiàn)微信授權(quán)登錄

    微信的登錄功能是用戶注冊(cè)和使用微信的必經(jīng)之路之一,而微信授權(quán)登錄更是方便了用戶的登錄操作,本文主要介紹了SpringSecurityOAuth2實(shí)現(xiàn)微信授權(quán)登錄,感興趣的可以了解一下
    2023-09-09
  • 關(guān)于Java并發(fā)編程中線程間協(xié)作的兩種方式

    關(guān)于Java并發(fā)編程中線程間協(xié)作的兩種方式

    這篇文章主要介紹了關(guān)于Java并發(fā)編程中線程間協(xié)作的兩種方式,當(dāng)隊(duì)列滿時(shí),生產(chǎn)者需要等待隊(duì)列有空間才能繼續(xù)往里面放入商品,而在等待的期間內(nèi),生產(chǎn)者必須釋放對(duì)臨界資源的占用權(quán),這是消費(fèi)者模式,需要的朋友可以參考下
    2023-07-07
  • Java實(shí)現(xiàn)word文檔轉(zhuǎn)成圖片的示例詳解

    Java實(shí)現(xiàn)word文檔轉(zhuǎn)成圖片的示例詳解

    本文主要為大家詳細(xì)介紹了如何在Java項(xiàng)目中引用aspose-words和poi-tljar包實(shí)現(xiàn)word文檔轉(zhuǎn)成圖片,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • 在攔截器中讀取request參數(shù),解決在controller中無(wú)法二次讀取的問題

    在攔截器中讀取request參數(shù),解決在controller中無(wú)法二次讀取的問題

    這篇文章主要介紹了在攔截器中讀取request參數(shù),解決在controller中無(wú)法二次讀取的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 淺談Java中復(fù)制數(shù)組的方式

    淺談Java中復(fù)制數(shù)組的方式

    這篇文章主要介紹了Java中復(fù)制數(shù)組的幾種方法,需要的朋友可以參考下。
    2017-08-08
  • 東八區(qū)springboot如何配置序列化

    東八區(qū)springboot如何配置序列化

    本文主要介紹了東八區(qū)springboot如何配置序列化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之哈希表

    帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之哈希表

    這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之哈希表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • Lombok的@CustomLog流暢的公司多場(chǎng)景日志

    Lombok的@CustomLog流暢的公司多場(chǎng)景日志

    這篇文章主要為大家介紹了Lombok的@CustomLog流暢的公司多場(chǎng)景日志開發(fā)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • springboot如何去除debug日志

    springboot如何去除debug日志

    這篇文章主要介紹了springboot如何去除debug日志的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java實(shí)現(xiàn)簡(jiǎn)單的學(xué)生教師管理系統(tǒng)

    Java實(shí)現(xiàn)簡(jiǎn)單的學(xué)生教師管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單的學(xué)生教師管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評(píng)論

黄冈市| 泰安市| 黔西县| 五寨县| 阜新市| 开鲁县| 乡宁县| 浦江县| 佛冈县| 关岭| 东乡族自治县| 宁强县| 怀集县| 定州市| 得荣县| 襄垣县| 嵊泗县| 普安县| 台东县| 泊头市| 谷城县| 酉阳| 肥乡县| 自治县| 安丘市| 平山县| 水富县| 汝阳县| 建阳市| 马边| 平泉县| 井研县| 弥勒县| 孝义市| 射阳县| 安吉县| 普宁市| 永寿县| 宜阳县| 迁西县| 宁蒗|