本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
chinajavawolf
命令链
命令模式是四人帮设计模式(Gang Of Four Design Patterns)中非常有用的设计模式之一。
使用命令模式,一个复杂的过程被分解成多个单独的步骤。这个步骤就是命令模式中的命令。一个关键部分是这个命令被期望实现某些通用接口。这些命令被非常小心的分派给特定顺序。
这个过程运转是通过在命令列表下工作的。每个命令被一个操作机会。一个命令通过抛出一个异常或返回一个true来结束这个过程。
命令方法返回的类型不用必须是boolean型:对于对象类型,任何非null值短路过程。例如数字类型,任何非零值。对于void方法,仅是抛出异常将短路这个过程。
通常,这个命令接口由一个单独的方法组成。当这个命令接口有多个方法时,每个都能被考虑成作为它自己的链。
这是一种有用的模式,因为这样做很容易把某个过程仅仅通过提供新的命令并指定他们适合整个过程的位置。最常用的指挥链结合有序配置,以指定命令列表是什么 (并且它们应该以什么顺序执行)。
ChainBuilder 服务
因为这个模式在Tapestry内经常被使用,因为需要一个内建的服务存在以创建这个模式的实现。ChainBuilder服务负责所有的工作:
- public interface ChainBuilder
- {
- <T> T build(Class<T> commandInterface, List<T> commands);
- }
-
所有泛化的参数仅仅是确保命令的接口匹配列表中的项目,并且确定一个唯一的命令接口实例将被返回。
调用这个方法返回一个压缩在命令链中的对象给特定的接口和特定的那个接口的实现命令列表。
这可以被用在一个服务构建器方法内。决不是说构建器方法紧紧必须实例化一个类;它仅要求返回一个适当的对象。我们可以通过ChainBuilder服务创建那个对象。
- public static MyChainService build(List<MyChainService> commands,
- @InjectService("ChainBuilder")
- ChainBuilder chainBuilder)
- {
- return chainBuilder.build(MyChainService.class, commands);
- }
这里,MyChainService的行为通过他的配置被定义:通过一个或更多个模块贡献一个MyChainService命令的有序列表。
在内部,ChainBuilder创建了一个实现了这个服务接口的新的类。命令列表被转换成一个array,被用在服务实现中(为最大的效率)。因此,在创建这个链实例后改变这个列表将不会影响这个链实例的行为。
ChainBuilder将会为很多实现了同一命令接口的链而重新使用这个构成的类。
分享到:
- 2007-05-28 10:10
- 浏览 2263
- 评论(0)
- 论坛回复 / 浏览 (0 / 3415)
- 查看更多
相关推荐
IOC(Inversion of Control,控制反转)是一种设计模式,通常与依赖注入(Dependency Injection)一起使用,以帮助减少代码间的耦合。在Tapestry中,IOC容器负责管理对象的生命周期和依赖关系,包括安全相关的服务。...
Tapestry IOC(Inversion of Control)是该框架的一部分,专注于依赖注入(DI)和服务定位,使得代码更加解耦,易于测试和维护。在"tapestry-ioc-5.0.3-src"这个压缩包中,我们可能找到Tapestry IOC框架的源代码,这...
2. **Tapestry IoC (Inversion of Control)**: 是Tapestry中的服务容器,负责对象的创建、配置和管理。IoC使得组件之间的依赖关系可以通过配置来管理,而不是硬编码,提高了代码的可测试性和可扩展性。 3. **...
2. **tapestry-ioc.jar**:Tapestry依赖注入(IoC)容器,用于管理对象的创建、配置和生命周期,使得代码更加松耦合。 3. **tapestry-webresources.jar**:处理静态资源如CSS、JavaScript和图片,支持压缩、合并和...
3. **Tapestry IOC**:Inversion of Control (IoC) 或依赖注入(DI) 是一种设计模式,Tapestry的IOC模块提供了这种功能,帮助管理对象之间的依赖关系,简化代码结构。它的LICENSE和NOTICE文件会包含关于IOC框架的授权...
4. **Tapestry IoC (Inversion of Control)**:`tapestry-ioc-5.3.8.jar`实现了依赖注入容器,使得对象的创建和管理变得更加简单,同时也促进了代码的解耦。开发者可以声明服务并定义它们之间的依赖关系,IoC容器会...
<tapestry:propertySelection name="country" label="Country" model="${countries}" /> ``` **14. Table组件:** - **用途:**用于创建表格。 - **示例代码:** ```xml <tapestry:table data-model="${users}...
"tapestry学习入门资料" Tapestry 是一个开源的基于 servlet 的应用程序框架,它使用组件对象模型来创建动态的、交互的 web 应用。 Tapestry 使得 Java 代码与 HTML 完全分离,利用这个框架开发大型应用变得...
- **tapestry-ioc**:Tapestry 的依赖注入和服务容器模块,是Tapestry的核心组件之一。 - **tapestry-tutorial1**:可能是一个示例教程项目,帮助开发者学习和理解Tapestry的基本用法。 - **tapestry-annotations*...
《Tapestry 5.0:构建Web应用程序》是一份专为深入了解Tapestry 5.0框架而准备的详细指南。Tapestry是Apache软件基金会的一个开源项目,它提供了一种基于Java的声明式MVC(Model-View-Controller)框架,用于构建...
Hivemind,同样由Howard开发,是一个轻量级的IoC(Inversion of Control)容器,用于管理对象间的依赖关系,使得Tapestry4不仅能够构建Web应用,还能通过对Hivemind的利用,实现框架自身的高度定制化。 #### 二、...
4. **tapestry-ioc-LICENSE.txt**:这部分涉及Tapestry的依赖注入(IOC)框架,它是Tapestry实现组件之间解耦的关键部分。 5. **tapestry-upload-LICENSE.txt**:关于Tapestry中文件上传功能的许可信息,帮助开发者...
6. **Spring集成**:通过tapestry-spring模块,Tapestry可以与Spring框架协同工作,利用Spring的IoC容器管理服务和bean。 7. **测试支持**:Tapestry-test模块提供了专门的测试工具,使得开发者能够对组件进行单元...
- **实现方式**: 通过`<tapestry:link>`标签或`<tapestry:component>`中的`href`属性来实现页面间的跳转。 - **应用场景**: 用户操作后导航到新的页面。 **1.3 初始化** - **初始化方法**: `init()`方法是在组件...
Tapestry IOC(Inversion of Control)容器,如`tapestry-ioc-5.3.7.jar`,是Tapestry框架的重要组成部分,负责服务的创建、管理和依赖注入。它使得组件之间的依赖关系可以通过配置文件进行管理,而不是硬编码在类...
Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它强调了组件化、模块化和可重用性,使得开发复杂的Web应用变得更加简单。本文将深入介绍Tapestry 4的相关知识点。 1. **组件化编程**: ...
此外,书中还会涉及依赖注入(Dependency Injection,DI)和控制反转(Inversion of Control,IoC)的概念,这是Tapestry 5实现松耦合和可测试性的关键。读者将学习如何使用Tapestry的IoC容器来管理对象的生命周期和...
《Tapestry 5:构建Web应用程序》是关于Tapestry 5框架的一本权威指南。Tapestry 5是一个强大的Java Web应用框架,由Apache软件基金会开发并维护,它致力于提供一种更高效、更优雅的方式来构建动态、交互式的Web应用...