本文共 2537 字,大约阅读时间需要 8 分钟。
在项目中应用Template method模式
类图:
Author:husthxd
From:
Msn:
模板方法模式达到的效果是公用的实现往父类中移动,特定的操作由子类来完成。应用模板模式可以实现类似如下的需求:
1. 在某个操作前执行某些检查操作,但各个模块的检查的操作是不同的
2. 在某个操作前或后执行某些前置后后置的动作,而各个模块的操作是不同的。
3. 等等
示例代码如下:package test.pattern;
import org.apache.log4j.Logger;import javax.servlet.http.HttpServletRequest;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/*** Description : 各模块流程处理基类
* Author : husthxd
* Date: 2005-1-10
* Version 1.0
*/
public abstract class abstractWorkFlowProcessMgr {
static Logger logger = Logger.getLogger(abstractWorkFlowProcessMgr.class);
/**
* 初始化,子类继承,设置流程id
*/
protected abstract void doInitPocessid();
/*** 判断操作是否可以继续,可以继续返回true,否则返回false
*
* @param conn
* @param vo
* @param wfo 包含有操作类型,操作结果
* @return
* @throws GFPortalException
*/
protected abstract boolean doCheckCanDoOrNot(Connection conn, Object vo, WorkFlowDataObj wfo) throws GFPortalException;
//模板方法
public void startup(Connection conn, Object vo, WorkFlowDataObj wfo) throws GFPortalException;
{
doInitProcessid();
doCheckCanDoOrNot(conn,vo,wfo);
}
//do other
}
子类: package test.pattern; import org.apache.log4j.Logger;import java.math.BigDecimal;
import java.sql.Connection;
import java.util.Map;
/*** Description : xx管理流程
* Author : husthxd
* Date: 2005-1-5
* Time: 19:54:29
* Version 1.0
*/
public class DrtPayReqProcessMgr extends abstractWorkFlowProcessMgr {
/**
* 日志记录对象
*/
static Logger logger = Logger.getLogger(DrtPayReqProcessMgr.class.getName());
/*** 工厂方法
*
* @return
*/
public static abstractWorkFlowProcessMgr factory() {
//调用工作流API
return new DrtPayReqProcessMgr();
}
/*** 初始化
*/
protected void doInitPocessid() {
super.processid = WorkFlowDataObj.WF_PROCESS_DRTPAY_REQ;
logger.info("设置流程id成功!");
}
/*** 判断操作是否可以继续,可以继续返回true,否则返回false
*
* @param conn
* @param vo
* @param wfo 包含有操作类型,操作结果
* @return
* @throws GFPortalException
*/
public boolean doCheckCanDoOrNot(Connection conn, Object vo, WorkFlowDataObj wfo) throws GFPortalException {
logger.info("检查是否可以执行操作!");
DrtPayReqVO reqvo = (DrtPayReqVO) vo;
//提交操作
if (wfo.getOperation().equalsIgnoreCase(WorkFlowDataObj.OPERATION_SUBMIT)) {
//判断是否已提交
boolean isSubmit = BusinessCheckSubmitAndAudit.factory().isDrtPayReqSubmit(conn, (DrtPayReqVO) vo);
if (isSubmit) {
//已提交
wfo.setError(CommonUtility.appendErrorFlag("Error!"));
return false;
}
return true;
}
//other method
}
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6906/viewspace-21822/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/6906/viewspace-21822/