Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类似加工步骤的设计模式,但略有变化_C#_Design Patterns - Fatal编程技术网

C# 类似加工步骤的设计模式,但略有变化

C# 类似加工步骤的设计模式,但略有变化,c#,design-patterns,C#,Design Patterns,什么是一个好的设计模式来实现一个功能,其中的数据处理是非常相似的,除了可能是几个步骤的变化。。。我最初认为责任链可能是合适的。。。但这感觉不是正确的选择。。如果我知道合适图案的名称,我会在互联网上搜索。。但我不知道在这里用什么样的图案。。所以请推荐一个 举例说明- 情景1 第一步 步骤2 步骤3 步骤4 情景2 第一步 步骤A 步骤3 步骤4 希望以这样一种方式实现该功能,即需要最少的代码重复 我确实意识到,在开始时,必须根据场景将必要的步骤链接在一起,就像工厂一样。您所描述的可以通过管道解决,

什么是一个好的设计模式来实现一个功能,其中的数据处理是非常相似的,除了可能是几个步骤的变化。。。我最初认为责任链可能是合适的。。。但这感觉不是正确的选择。。如果我知道合适图案的名称,我会在互联网上搜索。。但我不知道在这里用什么样的图案。。所以请推荐一个

举例说明-

情景1 第一步 步骤2 步骤3 步骤4

情景2 第一步 步骤A 步骤3 步骤4

希望以这样一种方式实现该功能,即需要最少的代码重复


我确实意识到,在开始时,必须根据场景将必要的步骤链接在一起,就像工厂一样。

您所描述的可以通过管道解决,其中一组步骤链接在一起,通过“管道”传递数据。在不同的语言中有不同的方法来实现这一点,但这里有一个在.NET(C#)中使用数据流管道的示例:还有一个在Java中使用Apache Commons的替代方法:

在您的示例中,在我看来,当序列/步骤总是相同的,但一个或多个步骤有不同的实现时,更合适。 在步骤数量变化较大的情况下,例如完全不同的步骤顺序,有时只是几个步骤,有时跳过一些步骤,而不是更好的解决方案


但是,如果需要在对象上一个接一个地应用不同的规则(如图形过滤器),则管道将更合适。一个“过滤器”完成后,您就将对象交给管道中的下一个过滤器

该[link](Design’用于比较设计模式您想要/需要封装什么。我想要封装的是,整个流程的几个步骤可能会有所不同,这取决于处理开始时已知的一些标准……我不想在步骤中添加if/else语句介于两者之间,我不想让一个步骤称为下一个步骤听起来不错..谢谢你的回复..+1,但会等待更多的回复与其他建议进行比较..虽然我确实认为管道是一种看待它的方式..这篇文章似乎非常具体到并行处理..你有关于这个主题的其他参考资料吗?我没有有多个输入要处理..这是管道模式似乎适合的..我只需要处理一个项目,但处理过程中的一个步骤可能因项目类型而异。MSDN链接进入并行处理,因为每个管道阶段都可以处理而没有副作用,使其成为可以在并行。也许Apache Commons管道解释了这个概念,但没有涉及并行性(至少现在是这样)。基本上,您有许多处理数据的阶段,每个阶段都定义在一个带有“process()”的“Stage”类中方法。这些阶段被组装到一个队列中,管道将从队列中弹出每个阶段,并将数据传递给它,将结果传递给下一个阶段,直到到达队列的末尾。