java 回調機制
軟件模塊之間總是存在著一定的接口,從調用方式上,可以把他們分為三類:同步調用、回調和異步調用。
同步調用是一種阻塞式調用,調用 方要等待對方執行完畢才返回,它是一種單向調用;
回調是一種雙向調用模式,也就是說,被調用方在接口被調用時也會調用對方的接口;
異步調用是一種類似消息或事件的機制,不過它的調用方向剛好相反,接口的服務在收到某種訊息或發生某種事件時,會主動通知客戶方(即調用客戶方的接口)?;卣{和異步調用的關系非常緊密,通常我們使用回調來實現異步消息的注冊,通過異步調用來實現消息的通知。
回調測試代碼:
interface Callback{ void callback(); } class Foo{ private Callback callback; public void setCallBack(Callback callback){ this.callback=callback; } public void doSth(){ System.out.println("doing sth..."); callback.callback(); } } public class CallBackTest { public static void main(String[] args){ Foo foo = new Foo(); foo.setCallBack(new Callback() { @Override public void callback() { System.out.println("call back..."); } }); foo.doSth(); } }
由此可以聯想,咱們面向接口的編程的調用關系,當業務層調用數據層時,是不需要把業務層自身傳遞到數據層的,并且這是一種上層調用下層的關系,比如我們在用框架的時候,一般直接調用框架提供的API就可以了,但回調不同,當框架不能滿足需求,我們想讓框架來調用自己的類方法,怎么做呢?總不至于去修改框架吧。許多優秀的框架提幾乎都供了相關的接口,我們只需要實現相關接口,即可完成了注冊,然后在合適的時候讓框架來調用我們自己的類,還記不記得我們在使用Struts時,當我們編寫Action時,就需要繼承Action類,然后實現execute()方法,在execute()方法中寫咱們自己的業務邏輯代碼,完成對用戶請求的處理。由此可以猜測,框架和容器中會提供大量的回調接口,以滿足個性化的定制。
因此通過回調的方式,就把一部分功能外包給別人,讓別人個性化定制,至于別人怎么實現不管,我唯一要做的就是定義好相關接口,這一設計允許了底層代碼調用高層定義的子程序,增強程序靈活性。
參考:
http://blog.csdn.net/pi9nc/article/details/23169357
http://hellosure.iteye.com/blog/1130176

浙公網安備 33010602011771號