(C12)Tapestry IoC:Service Builders Chain of Command

本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
chinajavawolf  
命令链
 
命令模式是四人帮设计模式 (Gang Of Four Design Patterns) 中非常有用的设计模式之一。
 
使用命令模式,一个复杂的过程被分解成多个单独的步骤。这个步骤就是命令模式中的命令。一个关键部分是这个命令被期望实现某些通用接口。这些命令被非常小心的分派给特定顺序。
 
这个过程运转是通过在命令列表下工作的。每个命令被一个操作机会。一个命令通过抛出一个异常或返回一个 true 来结束这个过程。
 
命令方法返回的类型不用必须是 boolean 型:对于对象类型,任何非 null 值短路过程。例如数字类型,任何非零值。对于void方法,仅是抛出异常将短路这个过程。
 
通常,这个命令接口由一个单独的方法组成。当这个命令接口有多个方法时,每个都能被考虑成作为它自己的链。
 
这是一种有用的模式 , 因为这样做很容易把某个过程仅仅通过提供新的命令并指定他们适合整个过程的位置。 最常用的指挥链结合有序配置 , 以指定命令列表是什么 ( 并且它们应该以什么顺序执行 )
 
ChainBuilder 服务
 
因为这个模式在 Tapestry 内经常被使用,因为需要一个内建的服务存在以创建这个模式的实现。 ChainBuilder 服务负责所有的工作: 
  1. public interface ChainBuilder   
  2. {   
  3.  <T> T build(Class<T> commandInterface, List<T> commands);   
  4. }   
  5.    
所有泛化的参数仅仅是确保命令的接口匹配列表中的项目,并且确定一个唯一的命令接口实例将被返回。
 
调用这个方法返回一个压缩在命令链中的对象给特定的接口和特定的那个接口的实现命令列表。
 
这可以被用在一个服务构建器方法内。决不是说构建器方法紧紧必须实例化一个类;它仅要求返回一个适当的对象。我们可以通过 ChainBuilder 服务创建那个对象。 
  1. public static MyChainService build(List<MyChainService> commands,   
  2.    @InjectService("ChainBuilder")   
  3.    ChainBuilder chainBuilder)   
  4. {   
  5.     return chainBuilder.build(MyChainService.class, commands);   
  6. }  
这里, MyChainService 的行为通过他的配置被定义:通过一个或更多个模块贡献一个 MyChainService 命令的有序列表。
 
在内部, ChainBuilder 创建了一个实现了这个服务接口的新的类。命令列表被转换成一个 array ,被用在服务实现中(为最大的效率)。因此,在创建这个链实例后改变这个列表将不会影响这个链实例的行为。
 
ChainBuilder 将会为很多实现了同一命令接口的链而重新使用这个构成的类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值