状态模式似乎很合适。您可以将系统中的每个节点建模为状态。
首先,您的对象将是:
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(); } }
}
检查颜色、重量等的业务逻辑将处于相应的状态。Node1 看起来像:
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);
将整个对象传递给节点可能是一种气味。相反,您甚至可以传入一个接口。
我看到这种方法的唯一缺点是某种类爆炸。可能有与节点一样多的类。
然而,该设计将是相当可扩展的——从某种意义上说,如果需要,您可以根据 OCP(开闭原则)添加更多节点。