gpt4 book ai didi

c# - 最适合实现流程图/模型的设计模式

转载 作者:太空狗 更新时间:2023-10-30 00:53:09 28 4
gpt4 key购买 nike

我必须在 C# 中实现流程图结构。我会将数据传递给第一个节点,它会检​​查一些数据项( bool 值),然后将数据路由到两个后续节点之一,依此类推。
基本逻辑流程是这样的:

  1. 节点 1

    • 如果颜色为红色则转到节点2
    • 否则转到节点3
  2. 节点2

    • 如果权重为 10 则转到节点 4
    • 否则转到规则 5
  3. 节点3

    • 如果尺寸大则转到节点 6
    • 否则转到节点 10

等等

我一直在研究责任链模式,它最初似乎解决了我的问题。但是,在我的大多数节点(处理程序)中,我需要有 2 个后续节点(真路径和假路径)才能调用。

查看 CoR 模式的实现,似乎有 NextHandler(下一个节点)的概念,但没有 NextHandlerA 和 NextHandlerB - 例如。

所以如果不是 CoR,哪种模式更适合解决这个问题。规则和顺序可能会经常更改。

感谢您的宝贵时间。

最佳答案

状态模式似乎很合适。您可以将系统中的每个节点建模为状态。

首先,您的对象将是:

public class Object
{
public string Color { get; set; }
public int Weight { get; set; }
public int Size { get; set; }

private NodeState _state;
public NodeState State { get { return _state; } set { _state = value; _state.Handle(); } }
}

检查颜色、重量等的业务逻辑将位于相应的状态中。节点 1 看起来像:

public class Node1 : NodeState
{
private readonly Object ctx;

public Node1(Object ctx)
{
this.ctx = ctx;
}

public void Handle()
{
if (ctx.Color.Equals("Red"))
ctx.State = new Node2(ctx);
else
ctx.State = new Node3(ctx);
}
}

首先,您将创建对象并为其设置初始状态。

var obj = new Object(){Color = "Red", Weight = 10, Size = 5};
obj.State = new Node1(obj);

将整个对象传递给节点可能是一种气味。相反,您甚至可以传入一个接口(interface)。

我看到这种方法的唯一缺点是某种类爆炸。有多少节点就有多少类。

但是,该设计具有很强的可扩展性 - 从某种意义上说,如果需要,您可以根据 OCP(开闭原则)添加更多节点。

关于c# - 最适合实现流程图/模型的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17631512/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com