冷静、沉淀

设计模式应用之Template method模式

上一篇 / 下一篇  2005-06-06 00:00:00 / 个人分类:J2EE

在项目中应用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

}


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-13  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 13673
  • 日志数: 838
  • 建立时间: 2007-12-28
  • 更新时间: 2008-10-02

RSS订阅

Open Toolbar