可以在你需要定义和执行一些顺序操作的时候采用Commons Chain。
下载地址:http://commons.apache.org/downloads/download_chain.cgi
五个工作类:
GetCustomerInfo.jar
package demo.chain;import org.apache.commons.chain.Command;import org.apache.commons.chain.Context;public class GetCustomerInfo implements Command ...{ public boolean execute(Context context) throws Exception ...{ System.out.println("Get customer info"); context.put("customerName","George Burdell"); return false; }}
TestDriveVehicle.jar
package demo.chain;import org.apache.commons.chain.Command;import org.apache.commons.chain.Context;public class TestDriveVehicle implements Command ...{ public boolean execute(Context context) throws Exception ...{ System.out.println("Test drive the vehicle"); return false; }}
NegotiateSale.jar
package demo.chain;import org.apache.commons.chain.Command;import org.apache.commons.chain.Context;public class NegotiateSale implements Command ...{ public boolean execute(Context context) throws Exception ...{ System.out.println("Negotiate sale"); return false; }}
ArrangeFinancing.jar
package demo.chain;import org.apache.commons.chain.Command;import org.apache.commons.chain.Context;public class ArrangeFinancing implements Command ...{ public boolean execute(Context context) throws Exception ...{ System.out.println("Arrange financing"); return false; }}
CloseSale.jar
package demo.chain;import org.apache.commons.chain.Command;import org.apache.commons.chain.Context;public class CloseSale implements Command ...{ public boolean execute(Context context) throws Exception ...{ System.out.println("Congratulations " +context.get("customerName") +", you bought a new car!"); return false; }}
测试代码:
package demo;import org.apache.commons.chain.Command;import org.apache.commons.chain.Context;import org.apache.commons.chain.impl.ChainBase;import org.apache.commons.chain.impl.ContextBase;import demo.chain.ArrangeFinancing;import demo.chain.CloseSale;import demo.chain.GetCustomerInfo;import demo.chain.NegotiateSale;import demo.chain.TestDriveVehicle;public class SellVehicleChain extends ChainBase ...{ public SellVehicleChain() ...{ super(); addCommand(new GetCustomerInfo()); addCommand(new TestDriveVehicle()); addCommand(new NegotiateSale()); addCommand(new ArrangeFinancing()); addCommand(new CloseSale()); } public static void main(String[] args) throws Exception ...{ Command process = new SellVehicleChain(); Context ctx = new ContextBase(); process.execute(ctx); }}
也可以使用xml文件进行配置:新建chain-config.xml文件如下:
新建SellVehicleContext.jar文件
package demo;import org.apache.commons.chain.impl.ContextBase;public class SellVehicleContext extends ContextBase ...{ private static final long serialVersionUID = 6954127190729021870L; private String customerName; public String getCustomerName() ...{ return customerName; } public void setCustomerName(String name) ...{ this.customerName = name; }}
测试类如下:
package demo;import org.apache.commons.chain.Catalog;import org.apache.commons.chain.Command;import org.apache.commons.chain.Context;import org.apache.commons.chain.config.ConfigParser;import org.apache.commons.chain.impl.CatalogFactoryBase;public class CatalogLoader ...{ private static final String CONFIG_FILE = "/demo/chain-config.xml"; private ConfigParser parser; private Catalog catalog; public CatalogLoader() ...{ parser = new ConfigParser(); } public Catalog getCatalog() throws Exception ...{ if (catalog == null) ...{ parser.parse(this.getClass().getResource(CONFIG_FILE)); } catalog = CatalogFactoryBase.getInstance().getCatalog(); return catalog; } public static void main(String[] args) throws Exception ...{ CatalogLoader loader = new CatalogLoader(); Catalog sampleCatalog = loader.getCatalog(); Command command = sampleCatalog.getCommand("sell-vehicle"); Context ctx = new SellVehicleContext(); command.execute(ctx); }}
Chain简明手册:http://blog.donews.com/foxgem/archive/2005/08/05/495938.aspx
再发展下来才有了:大霞美的花卉基地和清源山的花博园。