`
chinajavawolf
  • 浏览: 114818 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

(C14)Tapestry IoC:Service Builders Building Pipelines

阅读更多
本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
chinajavawolf  
构建管道
 
Tapestry内的一个共通的模式是过滤管道。在这个模式下,一个存在的服务是一个使用过滤的装饰器。这个过滤器将委派给这个服务,但在调用这个方法之前有机会去改变或替换参数,并且可以在返回前执行操作。这与命令链相似,但不同的是有两个接口(服务接口和过滤器接口) ,通过服务接口每个滤波器调用下一个过滤器。在命令链中,这个链调用每一个方法,每个必须在链中的下一个命令被调用之前返回。
 
服务接口和过滤器接口关系密切:过滤器接口必须匹配服务接口,但过滤器接口的每个方法必须有一个附加的参数,类型是服务接口。例如,一个管道执行字符串转换可以使用下面的接口:
  1. public interface StringTransformService   
  2. {   
  3.  String transform(String input);   
  4. }   
 
  1. public interface StringTransformFilter   
  2. {   
  3.  String transform(String input, StringTransformService delegate);   
  4. }  
一个过滤器的实现看上去是这样的:
  1. public class UpcasePreFilter implements StringTransformFilter   
  2. {   
  3.  public String transform(String input, StringTransformService delegate)   
  4.  {   
  5.     return delegate.transform(input.toUpperCase());   
  6.  }   
  7. }  
代替的是,过滤器可以传递input给未改变的委派,但在结果上调用toUpperCase()
  1. public class UpcasePostFilter implements StringTransformFilter   
  2. {   
  3.  public String transform(String input, StringTransformService delegate)   
  4.  {   
  5.     return delegate.transform(input).toUpperCase();   
  6.  }   
  7. }   
  8.    
PipelineBuilder服务对构造管道有用。这个服务经常注入在一个服务构建器方法内,与有序的服务配置一起。
 
这个构建器完成的是表现每个在管道中的过滤器作为这个服务接口的一个实例。
 
 
这个bridgePipelineBuilder服务创建。这个terminator必须被提供。bridgeterminator实现了这个服务接口。 
 
  1. public static StringTransformService build(   
  2.     @InjectService("PipelineBuilder")   
  3.     PipelineBuilder builder,   
  4.     List<StringTransformFilter> configuration,   
  5.     Log serviceLog)   
  6.     {   
  7.          
  8.       StringTransformService terminator = new StringTransformService()   
  9.       {   
  10.         public String transform(String input)   
  11.         {   
  12.           return input;   
  13.         }   
  14.       };   
  15.          
  16.       return builder.build(log,   
  17.         StringTransformService.class, StringTransformFilter.class,   
  18.         configuration,   
  19.         terminator);   
  20. }      
 
这里我们创建terminator给管道作为一个内建类的实例,并且提供给构建器。这个结果是一个新的服务压缩成整个管道。当没有过滤器时,这就是terminator
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics