程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> AsyncToken模式,替換通常的Listener模式

AsyncToken模式,替換通常的Listener模式

編輯:關於JAVA

對於一個異步的方法調用,我們需要異步的得到調用結果,通常我們會使用Listener模式,用於監聽方法異步調用的結果.

但應用該方法在實際使用中其實並不靈活.

1.因為由於Service的方法很多,可能會導致Listener要監聽的事件過多.

2.一般Listenner都是事先設置好監聽器,不能在方法調用的過程中靈活的增加新的監聽器

3.對如發送消息失敗再次發送消息這種需求處理會比較別扭.

以下為應用AsyncToken的使用示例:

Java代碼

public void testSendEmail() {
  final String address = "badqiu(a)gmail.com";
  final String subject = "test";
  final String content = "async token test";

  //返回的token,包含token.addResponder()用於監聽異步方法的執行結果
  AsyncToken token = sendAsyncEmail(address,subject,content);

  //token可以繼續傳遞給外部,以便外面感興趣的listener監聽這個異步方法的執行結果
  token.addResponder(new IResponder() {
   public void onFault(Exception fault) {
   System.out.println("email send fail,cause:"+fault);
   //此處可以直接引用address,subject,content,如,我們可以再次發送一次
   sendAsyncEmail(address,subject,content);
   }
   public void onResult(Object result) {
   System.out.println("email send success,result:"+result);
   }
  });
  }

  public AsyncToken sendAsyncEmail(String address,String subject,String content) {
  final AsyncToken token = new AsyncToken();

  Thread thread = new Thread(new Runnable() {
   public void run() {
   try {
    //do send email job...
    token.setComplete(executeResult); //通知Responder token執行完
   }catch(Exception e) {
    token.setFault(e); //通知Responder token發生錯誤
   }
   }
  });
  thread.start();

  return token;
  }

如上代碼,使用AsyncToken的好處:

1.token可以無限傳遞,只要對方法的執行結果感興趣,都可以監聽方法的執行結果.

2.擁有上下文,還可以引用前面的參數,以執行任務email重發這種任務

3.一個token與一個方法對應,方法調用時你即知道token對應的事件,不需要使用listener模式中的一般用EventType來區別不現的事件

3.靈活轉換,也可以將上面的token再轉至listener,再由listener以事件的方式派發事件

與Listener的異同:

1.token可以無限傳遞

2.沒有使用事件或是監聽不同的方法,listener一般配合需要使用事件,然後由事件進行參數的綁定.

3.listener模式一般是先設置好listener,而AsyncToken可以得到token後再添加監聽方法

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved