繁体   English   中英

在Java工作流程上使用哪种设计模式

[英]Which design pattern to use on Java workflow

我想实现用于执行工作流的代码,但我想避免使用if-else语句链。 我应该使用哪种设计模式? 我看着其中一些,但找不到合适的一个

工作流程示例。

A-> if(B) do C,
if(!B) do D-> E -> if(F) do G,
if(!H) do I-> J-> K
and so on..

if语句正是这样做的。 精心设计的if, else if, else将以最简单的形式描述逻辑。

如果您需要在运行时(例如通过DSL)指定逻辑,则可能需要创建决策和命令对象的树结构,其中决策可以链接到多个潜在命令,而命令可以链接到单个后续命令。 然后,该树将通过执行器传递,该执行器将从树的根开始,并根据决策的输入执行决策和命令。

这里还要考虑的明显选择是“责任链” 在这种情况下,CoR的问题有时是您真的不知道预先准备好的路径,因此布置所有可能的路径确实很麻烦。 当然,您可以使用Builder来构建链(请记住“四人帮”中的所有Maze建筑示例)。

关于CoR的伟大之处在于,您的代码不会成为一个无能为力的典当对象,每个对象都无能为力。

同样,CoR提供了很大的灵活性。 如果客户说“ OMG,缺少两个关键步骤”,那么有人可以添加它们而不会破坏很多其他内容。 单一来源的业务流程是原型神对象的反模式,因此也许从CoR开始,并计划在CoR用完时撤离。

不确定要执行的操作,但似乎需要在处理过程中的某个时间点做出决策。 如果您不想使用if..else阶梯,则可以使用以下方法创建一个抽象类:

abstract protected boolean condition(<whatever params you need>)
abstract protected boolean doAction(<same params>)

public void execute(<params>) {

   if(condition(<params>)) {
      doAction(<params>)
   }
}

您可以扩展此抽象基类,并为每种行为创建一个规则类,以管理满足条件时发生的条件和操作。

然后,您可以将这些类链接在一起,从某个地方的循环中执行它们(将初始输入(A)传递到列表中的第一条规则)。还可以添加另一个抽象方法,并在execute()中的IF之后从ELSE块中调用它。 )

基本上,所有这些方法所做的就是将If..Else阶梯抽象到更高的层次。 实际上,根据问题的范围,ifs和else可能更简单。

如果您给我更多细节,我可以提供更多想法!

使用Messaging PatternsPipes&Filter也可以想象得到这一点。

如果您只是想要一个可配置的工作流程,则可以使用通道路由器组件来完成。

根据问题的性质和严重程度,您可以为上述组件创建自己的微型简单实现,也可以寻找可立即使用的解决方案,例如Spring Integration(可能需要学习一些知识)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM