博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式应用之Template method模式
阅读量:2498 次
发布时间:2019-05-11

本文共 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/

你可能感兴趣的文章
程序的基础知识
查看>>
FreeModbus在STM32上移植(转)
查看>>
使用 pjax 载入的新页面,新页面上 类方法 无法被触发?
查看>>
sql server从一个数据库复制一个表到另一个数据库的方法
查看>>
微软正式公布Win8版本 ARM版命名为Windows RT
查看>>
4.java设计模式-原型模式(prototype)
查看>>
Javaee -----01----javaee的环境搭建和html标签 ...
查看>>
JVM内存分布和垃圾回收
查看>>
DOM操作指令
查看>>
PHPCMS快速建站系列之类别调用及类别显示页面
查看>>
《第二章 感知机》
查看>>
HomeWork1_Login in
查看>>
javascript中的类
查看>>
新词发现博文收集
查看>>
input text focus去掉默认光影
查看>>
使用JsonP进行跨域请求
查看>>
HDU 5317 RGCDQ (数论素筛)
查看>>
学习JSP(一)
查看>>
node安装-Win+Linux+Mac osx
查看>>
cookie和session笔记
查看>>