博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACTIVITI 研究代码 之 模版模式
阅读量:6985 次
发布时间:2019-06-27

本文共 2696 字,大约阅读时间需要 8 分钟。

模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本方法汇总起来的方法叫做模板方法(template method),这个设计模式的名字就是从此而来。

在activit中很多地方用到了此模式,用这个模式可以重用业务逻辑。

实例代码如下:

比如在ACTIVITI 的设置流程变量代码就采用了此模式。

1.抽象模板类。

public abstract class NeedsActiveExecutionCmd
implements Command
, Serializable { private static final long serialVersionUID = 1L; protected String executionId; public NeedsActiveExecutionCmd(String executionId) { this.executionId = executionId; } public T execute(CommandContext commandContext) { if(executionId == null) { throw new ActivitiIllegalArgumentException("executionId is null"); } ExecutionEntity execution = commandContext .getExecutionEntityManager() .findExecutionById(executionId); if (execution==null) { throw new ActivitiObjectNotFoundException("execution "+executionId+" doesn't exist", Execution.class); } if (execution.isSuspended()) { throw new ActivitiException(getSuspendedExceptionMessage()); } return execute(commandContext, execution); } /** * Subclasses should implement this method. * The provided {
@link ExecutionEntity} is guaranteed to be active (ie. not suspended). */ protected abstract T execute(CommandContext commandContext, ExecutionEntity execution);

这个代码可以被其他的子类继承,这个类实现了根据executionId获取ExecutionEntity 实例逻辑,其他的子类可以继承这个类,实现 T execute(CommandContext commandContext, ExecutionEntity execution)方法。重用这此逻辑。

 

子类代码如下:

public class SetExecutionVariablesCmd extends NeedsActiveExecutionCmd {  private static final long serialVersionUID = 1L;    protected Map
variables; protected boolean isLocal; public SetExecutionVariablesCmd(String executionId, Map
variables, boolean isLocal) { super(executionId); this.variables = variables; this.isLocal = isLocal; } protected Object execute(CommandContext commandContext, ExecutionEntity execution) { if (isLocal) { execution.setVariablesLocal(variables); } else { execution.setVariables(variables); } // ACT-1887: Force an update of the execution's revision to prevent simultaneous inserts of the same // variable. If not, duplicate variables may occur since optimistic locking doesn't work on inserts execution.forceUpdate(); return null; } @Override protected String getSuspendedExceptionMessage() { return "Cannot set variables because execution '" + executionId + "' is suspended"; } }
protected Object execute(CommandContext commandContext, ExecutionEntity execution) 这个代码就是子类实现的逻辑。

转载于:https://www.cnblogs.com/yg_zhang/p/3677252.html

你可能感兴趣的文章
马云:现实版岳不群?
查看>>
IT从花钱到赚钱——惠普IT转型记
查看>>
Ossim系统常见测试方法
查看>>
创业那些年,我们一起走过的坑
查看>>
瞎扯赚大钱的逻辑
查看>>
"人肉"云-【软件和信息服务】2014.02
查看>>
华为5.3亿美元收购赛门铁克在合资公司中股权
查看>>
Asp.net mvc4用JQuery插件实现异步上传
查看>>
使用组策略控制可移动存储访问
查看>>
监控平台实施方案
查看>>
RSA2012系列(2):HP谈他们的安全智能平台
查看>>
统帅转型:轻时尚时代挺进年轻领地
查看>>
Photoshop制作一只可爱的卡通小鸟
查看>>
飞鹤借力品质打造奶粉生态 胜算几何?
查看>>
1-2-Active Directory 域服务准备概述
查看>>
分享Silverlight/WPF/Windows Phone一周学习导读(07月25日-07月31日)
查看>>
理解并取证:动态路由协议RIP的工作原理
查看>>
演示:思科路由器到路由器的IOS镜像管理
查看>>
Lync 小技巧-33-BlueStacks安卓模拟器 For Lync 2013
查看>>
从云原生看企业云的未来
查看>>