Apache commons chain简介和简单实现

apache commons chain 提供了对CoR模式的基础支持。。CoR模式,是Chain of Responsebility的缩写。CommonsChain实现了Chain of Responsebility和Command模式,其中的Catalog + 配置文件的方式使得调用方和Command的实现方的耦合度大大的降低,提高了灵活性。

使用Apachecommons chain,需要将commons-chain.jar放入你的classpath,目前最新的版本是1.2。

从使用的角度来看,和工作流(workflow)非常相似。

一个使用Apachecommons chain的简单的例子:

packagetest.ffm83.commons.chain;

importorg.apache.commons.chain.Command;

importorg.apache.commons.chain.Context;

importorg.apache.commons.chain.impl.ChainBase;

importorg.apache.commons.chain.impl.ContextBase;

/**

* 通过commons chain 进行任务链的处理

* @author 范芳铭

*/

publicclass CommandChain  extends ChainBase{

//增加命令的顺序也决定了执行命令的顺序

public CommandChain(){

addCommand( new Command1());

addCommand( new Command2());

addCommand( new Command3());

}

public static void main(String[] args)throws Exception{

CommandChain process = newCommandChain();

Context ctx= new ContextBase();

process.execute( ctx);

}

public class Command1 implements Command {

public boolean execute(Context arg0)throws Exception {

System.out.println("Command1is done!");

return false;

}

}

public class Command2 implements Command {

public boolean execute(Context arg0)throws Exception {

System.out.println("Command2is done!");

return false;

}

}

public class Command3 implements Command {

public boolean execute(Context arg0)throws Exception {

System.out.println("Command3is done!");

return true;

}

}

}

运行结果如下:

Command1is done!

Command2is done!

Command3is done!

使用chain,必须将流程中的每一步写成一个类,这个类需要有一个public的方法execute()。这和传统的命令模式(Command pattern)实现相同。

核心组件和相关概念

1.Context     command的执行的上下文环境,即包含了应用程序的状态。

extends map。继承自map接口,没有增加任何其他的接口方法,它只是一个标记接口。ContextBase是它的实现类。

一般情况下,使用map来记录状态就可以了。例如map.put(state,value),map.get(state).在某些特定的使用时候,若需要明确定义拥有特定状态属性的java bean,例如通过ProfileContext.getXXState()/ProfileContext.setXXState(stateValue)来获得和属性具体的属性值。通过继承ContextBase 来实现,加入特定的属性字段,与此同时获得了两种方式来获取具体的状态。get(state)和getXXState()。通过反射类实现。

2.Command:职责的最小单元。

注意:return false 会继续执行chain中后续的command,return true会停止后续command的执行。

3.filter:是一种特殊的command,加入了postprocess 方法。在chain return之前会去执行postprocess。可以在该方法中释放资源。

4.catalog:command或chain的集合。通过配置文件类加载chain of command 或者command。通过catalog.getCommand(commandName)获取Command。

此外,chain还可以使用XML配置文件的方式使用,能够很方便的注入应用中。

时间: 2024-08-10 00:41:41

Apache commons chain简介和简单实现的相关文章

Apache commons exec 简介和简单ping命令方法调用实现

Apache commonsexec提供一些常用的方法用来执行外部进程.Apache commons exec库提供了监视狗Watchdog来设监视进程的执行超时,同时也还实现了同步和异步功能. Apache commonsexec涉及到多线程,比如新启动一个进程,Java中需要再开三个线程来处理进程的三个数据流,分别是标准输入,标准输出和错误输出. 需要使用该功能需要引入commons-exec-1.3.jar包,目前最新的版本为1.3版本. 在日常工作和生活中,我们经常需要用到网络,网络有时

Apache commons Proxy简介和动态代理、动态拦截器实现

Apache Commons Proxy 是Apache 的一个之项目,封装了 Java 对象代理的一些常用方法.又叫做 动态代理. 动态代理的作用非常大,在很多底层框架中都会用得到,比如struts,Spring等都用到了动态代理,它的原理很简单,就是将你要使用的类,重新生成一个子类或本类,这样框架就可以利用这个新生成的类做一些事情,比如在该类的方法前后加一些代码. 设想一下,不用修改任何已经编写好的代码,只要使用动态代理就可以灵活的加入一些东西,将来要是不喜欢了,不用也不会影响原来的代码.

Apache在Commons Compress简介和简单应用

Apache在CommonsCompress中提供了众所周知的tar.cpio.zip等压缩算法实现,其中最为丰富的当属zip实现了! Commons Compress为压缩(GZip和BZip2)构建了压缩算法工厂类CompressorStreamFactory.通过这个类可以方便的构建GZip和BZip2的输入输出流,关键字分别为"gz"和"bzip2". GZip Java代码  //GzipCompressorInputStream CompressorIn

Apache Commons IO简介

虽然Google的guava对Java的IO操作进行了一定封装,但是它更偏向于集合.并发和缓存,在实际项目中,我非常喜欢guava,同时我也非常喜欢Apache的一个工具包org.apache.commons.io,这两个工具包提供非常强大的工具能力,能够简化代码逻辑,提高开发效率和质量,是每个Java程序员都应该掌握的工具包.此文简单介绍一下org.apache.commons.io,详细的可参考其API注,此文绝大部分内容翻译自http://www.javacodegeeks.com/201

Apache Commons CLI 简介

CLI 命令代码实现 命令行程序处理流程相对比较简单,主要流程为设定命令行参数 -> 解析输入参数 -> 使用输入的数据进行逻辑处理CLI 定义阶段 每一条命令行都必须定义一组参数,它们被用来定义应用程序的接口.Apache Commons CLI 使用 Options 这个类来定义和设置参数,它是所有 Option 实例的容器.在 CLI 中,目前有两种方式来创建 Options,一种是通过构造函数,这是最普通也是最为大家所熟知的一种方式:另外一种方法是通过 Options 中定义的工厂方式

Apache Commons logging简介和使用

本章节内容主要来自网络和整理. Apache Commons Logging,又叫做JakartaCommons Logging (JCL),他提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具.它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具.用户被假定已熟悉某种日志实现工具的更高级别的细节.JCL提供的接口,对其它一些日志工具,包括Log4J, Avalon LogKit, and JDK等,进行了

Apache Commons pool 简介和pool连接池代码

在实际中工作,我们经常遇到需要连接池的地方,特别是数据库连接池. 我们为什么需要池呢?因为这些资源的创建,都很消耗资源.因此,我们使用一个对象池,里面预先创建了一些资源对象.当我们需要时,从池中取出对象,而不需要时,把对象返回池中.这样就可以提高代码运行的效率. Apache Commons Pool(http://commons.apache.org/pool/)为我们提供了很方便的接口来实现对象池.我们唯一需要实现的就是如何产生对象,而不用去考虑一堆多线程问题. 2013年,Apache C

Apache commons CLI介绍和简单应用

CLI 即Command Line Interface,也就是"命令行接口",它为Java 程序访问和解析命令行参数提供了一种统一的接口. apache Commons CLI为用户提供了一个解释命令行的API. 它在解释命令行时主要有三个状态,即:定义.解释和询问交互. 通过使用commons cli则可以很容易的访问参数,而不必去循环String[] args. 这个命令需要模拟命令行输入,可以将应用做成jar文件后输入命令行执行,也可以将命令行包装成参数执行. 在eclipse下

Apache commons beanutils简介和使用

在一般的写bean组件的时候,都必须要写setter和getter方法,当然假如我们事先已经知道bean的相关属性和方法,写bean是比较简单的,但是组件太多的时候,重复编写经常是枯燥乏味令人厌烦的.但当有些时候我么需要调用动态对象的属性的时候,我们应该怎么来设定和获取对象的属性呢?BeanUtils就可以帮助我们来简化解决这个问题. 目前最新的版本是1.9. 在日常的开发中,下面类似的代码应该是非常的眼熟. DynaActionForm daf =(DynaActionForm)form ;