java回调机制及其实现(转)
1. 什么是回調函數
回調函數,顧名思義,用于回調的函數。回調函數只是一個功能片段,由用戶按照回調函數調用約定來實現的一個函數。回調函數是一個工作流的一部分,由工作流來決定函數的調用(回調)時機。回調函數包含下面幾個特性:
? (1)屬于工作流的一個部分;
??(2)必須按照工作流指定的調用約定來申明(定義);
? ? (3)他的調用時機由工作流決定,回調函數的實現者不能直接調用回調函數來實現工作流的功能;
2. ?回調機制
回調機制是一種常見的設計模式,它把工作流內的某個數據處理邏輯,按照約定的接口暴露給外部使用者。為外部使用者提供數據,或要求外部使用者提供數據。
就像電腦上的USB接口,插什么U盤都可以,可以從電腦上Copy數據,也可以Copy數據到電腦。
3.java的回調機制
軟件模塊之間總是存在這一定的接口,從調用方式上,可以把他們分為三類:同步調用、回調、異步調用。
同步調用:一種阻塞式調用,調用方要等待對方執行完畢才能返回,它是一種單向調用;
回調:一種雙向調用模式,也就是說,被調用方在接口被調用時也會調用對方的接口
異步調用:一種類似消息或事件的機制,不過它的調用方向剛好相反,接口的服務在收到某種訊息或發生某種事件時,會主動通知客戶方(即調用客戶方的接口)。
回調和異步調用的關系非常緊密:使用回調來實現異步消息的注冊,通過異步調用來實現消息的通知。
?
4.回調的java例子
例1:
?
public class CallbackExample { public static void main(String[] args) { FooBar fooBar = new FooBar(); fooBar.setCallback(new ICallback() { public void postExec() { System.out.println("在CallbackExample類中實現但不能被CallbackExample的對象調用,而由FooBar對象調用"); } }); } } interface ICallback { //需要回調的方法 public void postExec(); } class FooBar { private ICallback callback; public void setCallback(ICallback callback) { this.callback = callback; doSth(); } public void doSth() { callback.postExec(); } }?
例2:
?
public class CallbackFetcherExample { public static void main(String[] args) { new Worker().doWork(); } } interface FetchCallback { void onData(Data data); void onError(Throwable cause); } interface Fetcher { void fetchData(FetchCallback callback); } class Worker { Data data = new Data(); public void doWork() { Fetcher fetcher = new Fetcher() { public void fetchData(FetchCallback callback) { System.out.println("start fetch data..."); callback.onData(data); } }; fetcher.fetchData(new FetchCallback() { public void onData(Data data) { // call if data is fetched without error System.out.println("Data received: " + data); } public void onError(Throwable cause) { //call if error is received during fetch System.err.println("An error accour: " + cause.getMessage()); } }); } } class Data { }http://blog.csdn.net/xyls12345/article/details/26452247?
??
觀察者模式與回調機制的關系
觀察者模式:在對象之間定義一對多的依賴,這樣一來,當一個對象改變狀態,依賴它的對象都會收到通知,并自動更新。?
以上篇博文java回調機制及其實現為例,在例1中可以將FooBar作為一個主題(被觀察者),ICallback的實現對象作為觀察者,當FooBar調用setCallback時,通知ICallback的postExec()方法改變狀態,當然這是一對一的依賴。
所以,我們可以把回調機制是觀察者模式的一個特殊類型,即只有一個觀察者。
http://blog.csdn.net/xyls12345/article/details/26456323
?
轉載于:https://www.cnblogs.com/softidea/p/4861217.html
總結
以上是生活随笔為你收集整理的java回调机制及其实现(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jaxb和dozer简介
- 下一篇: [Logstash-input-redi