1. 程式人生 > >java的回撥相關

java的回撥相關

    模組間的呼叫分為三種方式:同步呼叫、非同步呼叫、回撥。

    1.同步呼叫:是最基本的呼叫方式,類A的方法呼叫類B的方法,一直等待類B的方法執行完畢,類A的方法才繼續執行下去,這種呼叫方法適合類B方法執行的時間不長的情況,因為類B方法執行時間過長會導致類A方法的餘下程式碼不能順利執行導致整個流程的阻塞。是一種單向呼叫。

    2.非同步呼叫:為了解決同步呼叫可能出現的阻塞,而導致整個流程卡住的一種呼叫方式。類A的方法通過新起執行緒的方式呼叫類B的方法,程式碼接著直接往下執行,這樣無論B類方法執行時間多久,都不會阻塞住類A方法的執行。但是由於類A方法不等待類B方法的執行完成,在類A方法需要類B方法執行結果的情況下,必須通過一定的方式對類B方法的執行結果進行監聽。在Java中,可以使用Future+Callable的方式做到這一點。

    3.回撥:回撥機制就是Java呼叫機制中的一種呼叫方法,類A的a()方法呼叫類B的b()方法,類B的b()方法執行完畢主動呼叫類A的callback()方法這樣一種呼叫方式組成了上圖,也就是一種雙向的呼叫方式。回撥和非同步呼叫的關係非常緊密:使用回撥來實現非同步訊息的註冊,通過非同步呼叫來實現訊息的通知。

     java的回撥是通過介面或者內部類來實現的。是功能定義和功能實現分享的一種手段,是一種耦合設計思想。作為一種架構,必須有自己的執行環境,並且提供使用者的實現介面。

        (1)同步回撥:程式碼執行到某一個位置的時候,如果遇到了需要回調的程式碼,會在這裡等待,等待回撥結果返回後再繼續執行。

        (2)非同步回撥:程式碼執行到需要回調的程式碼的時候,並不會停下來,而是繼續執行,當然可能過一會回撥的結果會返回回來。

    回撥函式:是客戶程式Client呼叫服務程式Service中的某個方法A,然後Service又在某個時候反過來呼叫Client中的某個方法B,對於Client來說這個B便叫做回撥函式。 回撥函式只是一個功能片段,由使用者按照回撥函式呼叫約定來實現的一個函式。回撥函式是一個工作流的一部分,由工作流來決定函式的呼叫時機,回撥的核心在於呼叫者不知道執行者什麼時侯會完成任務,所以會由執行者通知呼叫者。

    1.回撥函式也是一個函式或過程,不過它是一個由呼叫方自己實現,供被呼叫方使用的特殊函式。 

    2.即呼叫方A不直接使用此函式function,而是通過呼叫被呼叫方B來間接呼叫function。

    實現的所需的步驟:

    1、定義回撥介面和回撥方法

    2、Client實現回撥介面和回撥方法,並在Client中包含Service引用,通過引用呼叫Servie中的方法並且必須傳入一個當前物件Client(因為當前物件實現了CallBack介面所以也屬於介面物件)

    3、在Service中定義一個介面物件引用並在方法中對其初始化(將Client傳過來的當前物件賦值給介面物件),通過介面物件呼叫介面中方法(呼叫的Client實現的介面方法)

 

     其實介面回撥機制和一種設計模式—觀察者模式也有相似之處:“定義物件的一種一對多的依賴關係,當一個物件的狀態傳送改變的時候,所有對他依賴的物件都被通知到並更新。”觀察者是一種模式,是通過介面回撥的方法實現的,即它是一種回撥的體現。回撥與觀察者模式的區別是,它是種原理,而非具體實現。