【问题标题】:Design pattern for similar processing steps, but with slight variations类似处理步骤的设计模式,但略有不同
【发布时间】:2023-03-26 03:16:01
【问题描述】:

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

举个例子就清楚了-

场景 1 第1步 第2步 第 3 步 第 4 步

场景 2 第1步 步骤 A 第 3 步 第 4 步

希望以最少重复代码的方式实现该功能。

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

【问题讨论】:

  • [link] (amzn.com/0321889061)'EmergentDesign' 用来比较设计模式的东西之一你想要/需要封装什么。
  • 我想要封装的是这样一个事实,即整个过程的几个步骤可能会有所不同,这取决于处理开始时已知的一些标准......我不想把 if/中间步骤中的 else 语句,我不希望一步调用下一步

标签: c# design-patterns


【解决方案1】:

您所描述的可以通过流水线解决,其中一组步骤链接在一起以通过“流水线”传递数据。用不同的语言有不同的方法来实现这一点,但这里有一个 .NET (C#) 中的数据流管道示例:http://msdn.microsoft.com/en-us/library/ff963548.aspx 和使用 Apache Commons 的 Java 中的替代方法:http://commons.apache.org/sandbox/commons-pipeline/pipeline_basics.html

【讨论】:

  • 听起来不错.. 感谢您的回复.. +1,但将等待更多回复与其他建议进行比较.. 虽然我确实认为管道是一种看待它的方式.. 文章似乎非常特定于并行处理..您还有其他关于该主题的参考资料吗?
  • 并不是说我没有要处理的多个输入.. 这似乎是管道模式适合的.. 我只需要处理一个项目,但处理中的一个步骤可能会有所不同关于项目的类型。
  • MSDN 链接进入并行处理,因为每个管道阶段都可以在没有副作用的情况下进行处理,使其可以并行执行。也许 Apache Commons Pipeline 在不涉及并行性的情况下解释了这个概念(至少现在是这样)。基本上,您有许多用于处理数据的阶段,每个阶段都在带有“process()”方法的“阶段”类中定义。这些阶段被组装成一个队列,管道会将每个阶段从队列中弹出并将数据传递给它,将结果传递到下一个阶段,直到到达队列的末尾。
【解决方案2】:

从您的示例看来,Template pattern 在序列/步骤始终相同但一个或多个步骤具有不同实现时更合适。 如果步骤数量变化很大,例如完全不同的步骤顺序,有时只需几个步骤,有时跳过一些步骤,而不是 Strategy pattern 会是更好的解决方案。

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

【讨论】:

    猜你喜欢
    • 2012-12-22
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 2010-09-24
    相关资源
    最近更新 更多