[设计模式]AsyncToken模式,替换通常的Listener模式

对于一个异步的方法调用,我们需要异步的得到调用结果,通常我们会使用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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring 使用了多种设计模式,常见的设计模式包括: 1. 单例模式(Singleton Pattern):Spring 的核心容器 ApplicationContext 都是单例对象,保证了容器中的 Bean 对象也是单例的。 2. 工厂模式(Factory Pattern):Spring 使用工厂模式创建和管理 Bean 对象,通过配置文件或注解来实现对 Bean 的创建和配置。 3. 代理模式(Proxy Pattern):Spring AOP(面向切面编程)使用了代理模式来实现横切关注点的功能,如事务管理、日志记录等。 4. 观察者模式(Observer Pattern):Spring 的事件驱动机制基于观察者模式,通过监听器(Listener)来处理事件。 5. 模板模式(Template Pattern):Spring 的 JdbcTemplate 使用了模板模式,将数据库操作的公共部分封装在模板中,减少了重复代码的编写。 6. 建造者模式(Builder Pattern):Spring 的构建者模式用于配置复杂的对象,如 BeanDefinitionBuilder 用于构建 BeanDefinition 对象。 7. 适配器模式(Adapter Pattern):Spring 的适配器模式用于将不同的接口适配到统一的接口,如 HandlerAdapter 用于处理不同类型的请求处理器。 8. 装饰器模式(Decorator Pattern):Spring 的装饰器模式用于增强现有对象的功能,如 AOP 中的切面(Aspect)就是通过装饰器模式实现的。 以上只是一些常见的设计模式在 Spring 中的应用,实际上 Spring 还使用了其他设计模式来提供更强大的功能和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值