对于一个异步的方法调用,我们需要异步的得到调用结果,通常我们会使用Listener模式,用于监听方法异步调用的结果.
但应用该方法在实际使用中其实并不灵活.
1.因为由于Service的方法很多,可能会导致Listener要监听的事件过多.
2.一般Listenner都是事先设置好监听器,不能在方法调用的过程中灵活的增加新的监听器
3.对如发送消息失败再次发送消息这种需求处理会比较别扭.
以下为应用AsyncToken的使用示例:
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后再添加监听方法
AsyncToken的源码:
http://code.google.com/p/rapid-framework/source/browse/trunk/rapid-framework/src/rapid_framework_common/cn/org/rapid_framework/util/concurrent/async/AsyncToken.java
参考:
Flex中的AsyncToken
分享到:
相关推荐
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件...
7. 观察者模式:JUnit与监听器(Listener)的交互体现了观察者模式。监听器可以注册到测试运行器上,当测试开始、结束或者出现错误时,监听器会收到通知并执行相应的回调方法。 8. 代理模式:JUnit的`Rule`机制可以...
13. **观察者模式(Observer)**:Spring AOP并没有直接实现观察者模式,但在Spring事件模型中,`ApplicationEventPublisher`和`ApplicationListener`接口体现了观察者模式,允许对象注册监听并响应特定事件。...
7. 观察者模式:Spring的事件驱动模型使用了观察者模式,如ApplicationListener接口,允许监听和响应Spring应用上下文中的事件。 8. 装饰器模式:Spring AOP的切面(Aspect)可以看作是对原有对象的装饰,添加新的...
在 Java 开发中,Callback 模式是一种重要的设计模式,用于处理异步通信和事件处理。本文将详细介绍 Callback 模式的意图、解释、编程示例、适用场景、实际应用、优点和权衡。同时,还将提供示例代码的下载链接,...
4. 观察者模式:Spring支持事件驱动的编程,通过`ApplicationEvent`和`ApplicationListener`接口,实现了发布-订阅的观察者模式。 5. 代理模式:Spring AOP(面向切面编程)使用动态代理模式,可以为对象提供额外的...
《Java EE设计模式:Spring企业级开发最佳实践》是一本深度探讨如何在企业级Java应用程序中有效运用设计模式的著作。这本书聚焦于Spring框架,它作为Java EE领域中最为广泛使用的开源框架之一,极大地简化了企业级...
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件...
Spring设计模式总结 在软件开发中,设计模式是解决常见问题的经验总结,它们为程序员提供了在特定场景下设计高效、可维护代码的蓝图。在Spring框架中,许多设计模式被广泛应用,以提升系统的灵活性和可扩展性。以下...
在Java中,Listener模式是设计模式的一种,属于行为型模式,它允许我们定义特定事件的处理程序,当事件触发时,这些处理程序会被调用。比如,我们可以创建一个MouseListener来监听鼠标事件,一个KeyListener来监听...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Java中,我们可以利用Java提供的...
设计模式是软件工程中的最佳实践,它是在特定上下文中解决常见问题的模板。在Java EE环境中,设计模式扮演着至关重要的角色,它们帮助开发人员遵循良好的编程习惯,提高代码的复用性和可维护性。 1. **单例模式**:...
本文将深入探讨如何使用C#的Winform框架结合TCPListener和TCPClient,以及多线程技术,实现客户端与服务器端的聊天模式。此外,我们还将讨论如何通过委托来解决在非UI线程中操作控件时可能引发的异常。 首先,TCP...
观察者模式通常的叫法叫做订阅-发布模式,类似于报刊杂志的订阅,观察者和被观察者就是读者和邮局的关系,读者先要在邮局订阅想要的报刊,当报刊发行时,邮局会将报刊邮寄到读者家里。观察者(Observer)和被观察者...
观察者模式通常用于实现实时更新和通知机制,在各种应用领域都有广泛的应用,如图形用户界面(GUI)、消息订阅系统、事件驱动系统等。 #### 二、观察者模式的角色与结构 观察者模式主要涉及四个角色: 1. **抽象...
观察者设计模式观察者模式(有时又被称为发布-订阅模式、模型-视图模式、源-收听者<Source/Listener>模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它...
适配器模式是一种软件设计模式,它允许不同的接口或类之间进行通信,即使它们的接口不兼容。适配器模式的核心思想是通过创建一个适配器类,将原有类的接口转换为客户期望的接口,从而使得原本无法协作的类能够协同...