模板方法模式(Template)
模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。
模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。
业务场景
假设我们现在要实现一个对单据审批功能,有请假申请、加班申请。他们的算法逻辑都一样,只有同意或拒绝后的操作不一样。你先不要为什么是这些功能,你只要知道我们现在有这么多的申请功能,然后有这么多申请的逻辑需要你实现。怎么做,是分别再各个模块的service里面实现一边吗?
注意,他们有一样的算法逻辑。接下来看怎么实现。其实实现起来很简单。
/**
* 工作流处理类:模板方法
*/
public abstract class WorkFlowService{
/**
* 审批单据工作流:同意/拒绝
*
* @param tenantId 租户id
* @param id 单据主键
* @param node 流程节点:最后节点/流程中节点
* @param approveResult 审批结果:同意/拒绝
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void workFlowChangeStatus(Long tenantId, Long id, String node, String approveResult) {
// 判断申请记录是否存在
check(tenantId, id);
// 最后节点