|
可以在你需要定义和执行一些顺序操作的时候采用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文件如下:
<catalog>
<chain name="sell-vehicle">
<command id="GetCustomerInfo" className="demo.chain.GetCustomerInfo" />
<command id="TestDriveVehicle" className="demo.chain.TestDriveVehicle" />
<command id="NegotiateSale" className="demo.chain.NegotiateSale" />
<command id="ArrangeFinancing" className="demo.chain.ArrangeFinancing" />
<command id="CloseSale" className="demo.chain.CloseSale" />
</chain>
</catalog>
新建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);
}
}
|