日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java--callback

發布時間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java--callback 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??? 早有寫貼的打算,無奈,剛剛出來工作,也是初到北京!生活還不安定,根本沒有辦法來寫,終于回學校了!

??? 廢話少說,在北京時,一位剛畢業的師兄,有一天問我:什么是CALLBACK!,說是面試時,有好多個公司都問了這個問題!當時我一時無語,只記著,在閱讀thinking in java是看到過有關他的介紹,但具體也說不清楚了,于是趕緊翻書,上網查資料。發現雖然都說的比較全面,但是都不是好理解!后來我又閱讀了c++中回調函數的概念,才對他有了一個模糊的認識!

? 其實我們從字面意思來判斷,就已經知道他大概的意思了,我從網上摘抄的定義是:軟件模塊之間總是存在著一定的接口,從調用方式上,可以把他們分為三類:同步調用、回調和異步調用。同步調用是一種阻塞式調用,調用方要等待對方執行完畢才返回,它是一種單向調用;回調是一種雙向調用模式,也就是說,被調用方在接口被調用時也會調用對方的接口(有待商榷);異步調用是一種類似消息或事件的機制,不過它的調用方向剛好相反,接口的服務在收到某種訊息或發生某種事件時,會主動通知客戶方(即調用客戶方的接口)。回調和異步調用的關系非常緊密,通常我們使用回調來實現異步消息的注冊,通過異步調用來實現消息的通知。是不是有點抽象,其實我們可以舉個簡單的例子:我寫個程序(也可能是個類,或者是個組件)稱為a,其中預留有回調函數接口,并封裝好了該程序。另外一個人B要讓a調用自己的程序b中的一個方法,于是,他通過我提供的接口回調自己b中的方法,目的達到。

??然后我們就可以寫程序了,

Code
public?class?Caller?{?????
public?MyCallInterface?mc;?????
public?void?setCallfuc(MyCallInterface?mc)?{???????
?
this.mc=?mc;????
?}?????
public?void?call(){this.mc.method();?????
}?
}????
//?我還需要定義一個接口,以便程序員B根據我的定義編寫程序實現接口
public?interface?MyCallInterface?{?
public?void?method();

}?????
//于是,程序員B只需要實現這個接口就能達到回調的目的了
?public?class?B?implements?MyCallInterface?{?
public?void?method()?{?
System.out.println(
"回調實現");?????
}

?
public?static?void?main(String?args[]){???????
?Caller?call?
=?new?Caller();????????
call.setCallfuc(
new?B());???????
?call.call();}?
}

?

OK,可以看到b實現了a回調他的方法!我們再來看個具體的例子,可能要復雜一點!有這樣的一個問題:

老板(Boss)讓工人(Worker)干完活告訴他干的情況如何。(來自網上的例子http://lavasoft.blog.51cto.com/62575/90453)

這是一個典型的回調問題,即工人要調用老板提供的接口,并且要老板調用學生的方法或屬性,來了解工人的完成情況

代碼如下:

Code
public?interface?Event?{?
????
/**?
?????*?返回發生事件信息?
?????*?
?????*?
@return?事件信息?
?????
*/?
????
public?String?happendEvent();?
}

public?class?EventA?implements?Event?{?
????
/**?
?????*?返回發生事件信息?
?????*?
?????*?
@return?事件信息?
?????
*/?
????
public?String?happendEvent()?{?
????????
return?"發生了事件?EventA!";?
????}?
}

public?class?EventB?implements?Event{?
????
/**?
?????*?返回發生事件信息?
?????*?
@return?事件信息?
?????
*/?
????
public?String?happendEvent()?{?
????????
return?"發生了事件?EventB!";?
????}?
}


public?class?Worker?{?
????
private?Event?event;????//事件?
????private?String?name;????//工人姓名?
????private?Boss?boss;??????//工人所屬的老板?

????
public?Worker(String?name,?Boss?boss)?{?
????????
this.name?=?name;?
????????
this.boss?=?boss;?
????}?

????
/**?
?????*?干活?
?????
*/?
????
public?void?doWork()?{?
????????System.out.println(name?
+?"?is?doing?working");?
????????
//工人挺辛苦,干著枯燥乏味的重復工作,哈哈?
????????for?(int?i?=?0;?i?<?2000000;?i++)?{?
????????????
int?x?=?i?/?234?+?234;?
????????}?
????????System.out.println(name?
+?"?was?finished?work.");?
????????
//向老板說明發生的情況?
????????boss.getWorkerEvent(this,?event);?
????}?

????
public?Event?getEvent()?{?
????????
return?event;?
????}?

????
public?void?setEvent(Event?event)?{?
????????
this.event?=?event;?
????}?

????
public?String?getName()?{?
????????
return?name;?
????}?

????
public?void?setName(String?name)?{?
????????
this.name?=?name;?
????}?
}
?

public?class?Boss?{?
????
private?String?name;?

????
public?Boss(String?name)?{?
????????
this.name?=?name;?
????}?

????
/**?
?????*?老板接收工人的事件?
?????*?
@param?worker?工人?
?????*?
@param?event??事件?
?????
*/?
????
public?void?getWorkerEvent(Worker?worker,?Event?event)?{?
????????System.out.println(
"老板接收到事件信息:?"+worker.getName()?+?":?"?+?event.happendEvent());?
????}?
}
?

public?class?Test?{?
????
public?static?void?main(String?args[]){?
????????
//初始化老板和工人?
????????Boss?boss?=?new?Boss("老板");?
????????Worker?worker1
=?new?Worker("張三",boss);?
????????Worker?worker2
=?new?Worker("李四",boss);?

????????
//捏造兩個事件?
????????Event?event1?=?new?EventA();?
????????Event?event2?
=?new?EventB();?

????????
//事件是工人發出的?
????????worker1.setEvent(event1);?
????????worker2.setEvent(event2);?

????????
//工人干活,干完了通知老板干的情況如何?
????????worker1.doWork();?
????????worker2.doWork();?

????}?
}

?? 我們可以看到在boss中,我們回調了工人的happendEvent方法,一般我們都用接口來實現回調!

轉載于:https://www.cnblogs.com/hya1109/archive/2008/09/04/1284726.html

總結

以上是生活随笔為你收集整理的java--callback的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。