ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 设计模式应用之Template method模式

设计模式应用之Template method模式

原创 Linux操作系统 作者:husthxd 时间:2005-06-06 00:00:00 0 删除 编辑

在项目中应用Template method模式

类图:

http://blog.itpub.net/get/11/template%20method.jpg


Author:husthxd

From:www.itpub.net

Msn:husthxd@hotmail.com

模板方法模式达到的效果是公用的实现往父类中移动,特定的操作由子类来完成。应用模板模式可以实现类似如下的需求:

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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: why&what&how
请登录后发表评论 登录
全部评论
ITPUB数据库版块资深版主,对Oracle、PostgreSQL有深入研究。

注册时间:2007-12-28

  • 博文量
    1398
  • 访问量
    3842866