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

(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将会为很多实现了同一命令接口的链而重新使用这个构成的类。
分享到:
评论

相关推荐

    tapestry5.3.5 IOC用户登陆权限

    tapestry5.3.5 IOC用户登陆权限原码

    tapestry-ioc-5.0.3-src

    一个web框架的IOC实现,Apache tapestry-ioc

    关于Tapestry的一些个人总结

    Tapestry简述: Tapestry是一个servle的扩展,它运行于servlet容器(Tomcat)或包含servlet容器的服务器(如Jboss) 通过使用Tapestry,开发者完全不需要使用JSP技术,用户只需要使用Tapestry提供的模板技术即可, ...

    深入浅出Tapestry

    资源名称:深入浅出Tapestry内容简介:本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在...

    Tapestry 5.4.1 相关jar文件

    Tapestry 5.4.1 相关jar文件

    tapestry-cometd:基于 CometD 的 Tapestry5 推送库

    基于库 特征: 无需编写一行 Javascript 即可创建推送应用程序 完全可配置 使用设置传入消息的... xmlns : p = " tapestry:parameter " &gt; &lt;!-- type a chat message in this form --&gt; &lt; form t :

    tapestry-5:Apache Tapestry 5的镜像

    Tapestry是一个面向组件的Java Web应用程序框架,专注于性能和开发人员的生产力。 组件只是页面的可重用部分。 创建自己的组件非常容易,Tapestry附带了许多可以使用的组件(窗体,循环,选择,复选框,网格,...

    tapestry5以上的帮助事例,帮助文档与spring衔接文档

    Tapestry是一个基于控件的框架以致于用它开发Web应用类似开发传统的GUI应用。你用Tapestry开发Web应用时你无需关注以操作为中心的(Operation-centric) Servlet API.引用Tapestry网站上的一句话:"Tapestry用对象...

    (Tapestry)An infrastructure for Fault-Tolerant Wide-area Location and Routing.ppt

    (Tapestry)An infrastructure for Fault-Tolerant Wide-area Location and Routing.

    tapestry教程资料文档合集

    Tapestry5最新中文教程.doc 作者 Renat Zubairov & Igor Drobiazko译者 沙晓兰 发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf ...

    tapestry-react:Apache Tapestry和React的集成

    将React( )与Tapestry( )一起使用。 该库提供了将Tapestry与JSX模板结合使用的基本集成。 用法 build.gradle : repositories { jcenter() } dependencies { runtime ' de.eddyson:tapestry-react:0.33.0 '...

    tapestry官方中文文档

    Tapestry 4 官方文档中文版本,现在中文资料比较少,和大家共享一下

    tapestry-src-5.1.0.5.zip

    包含: tapestry 的源代码, tapestry集成spring2.0 tapestry快速启动 tapestry upload tapestry hibernate tapestry annotations

    tapestry 实例

    tapestry 实例tapestry 实例tapestry 实例tapestry 实例

    Tapestry5.0.16_API文档

    Tapestry5.0.16文档和大家一起学习

    Maven + Tapestry5.3.8 + Spring4.0.5 + Oracle10g

    这是Tapestry5.3.8 版本的一个大Demo,集合Spring4.0, 采用Maven 项目管理工具,没有集合Hibernate。 之所以说是个大Demo,是因为这项目中包含的内容并不少,包含: 1)解决了Tapestry5.3.8中文Bug问题 2)Tapestry...

    tapestry3开发指南,带tapestry3所有jar包

    tapestry3开发指南,带tapestry3所有jar包

    深入浅出tapestry

    本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在J2EE Web应用程序中应用Tapestry框架的...

    tapestry:验证和编辑小型真核基因组装配体

    挂毯Tapestry是一种使用长序列阅读来验证和编辑小型真核基因组装配体的工具。 它旨在帮助识别接近完整的基因组装配体中的完整染色体,共生体,单倍型,复杂特征和错误。 在上有预印本。 它已被用来验证染色体。 ...

    Tapestry4开发指南

    Tapestry4的雏形是Tapestry3.1,Tapestry的作者Howard,不光开发了Tapestry,还同时开发了一个轻量级框架Hivemind。所以Tapestry3.1的开发一开始就处于Hivemind框架之下。后来由于种种原因,Howard没有将Tapestry3.1...

Global site tag (gtag.js) - Google Analytics