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



我想实现执行工作流程的代码,但是我想避免使用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..

在这里也考虑的明显选择是责任链。在这样的情况下,COR的问题是有时您真的不知道要提前什么路,因此建立所有可能的路径可能真的很艰苦。当然,您可以使用建筑商来构建链(请记住所有迷宫构建的示例。

关于COR的伟大之处是,您的代码不会成为一个无能为力的典当的大神对象。

此外,COR提供了很多灵活性。如果客户来了,说" OMG,则缺少两个关键步骤",可能有人可以添加它们而不会破坏许多其他内容。单源编排是原型的神对象,因此也许从Cor开始,并计划撤离该绳索是否用尽绳索。

if语句完全做到这一点。精心设计的if, else if, else将以最简单的形式描述逻辑。

如果您需要在运行时指定逻辑,例如,通过DSL,您可能需要创建决策和命令对象的树结构,在此过程中可以将决策链接到多个潜在的命令,并且可以是命令链接到一个后续命令。然后,将通过将树从树的根开始的遗嘱执行人传递,并根据决策的输入执行决策和命令。

不确定您要做什么,但是在处理过程中似乎需要在某些PT上做出决策。如果您不想使用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)传递给列表中的第一个规则)将它们链接在一起,您也可以添加另一种抽象方法,并从一个if之后的其他块中调用该方法在execute()

基本上,所有这些方法都在将您的if提取到更高的水平。根据问题的范围,实际上可能会更简单。

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

也可以使用消息模式或管道&amp;过滤器。

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

根据您问题的性质和幅度,您可以创建自己的迷你简单实现上述组件,或者寻找准备使用诸如Spring Integration之类的解决方案(可能有一些学习曲线可以照顾)。

最新更新