也许策略模式不是我所追求的。说我的代码看起来像这样(伪版本):
class Machine
{
private Stack<State> _internals;
public void DoOperation(Thingy x)
{
switch (x.operation)
{
case Op.Foo:
DoFoo();
break;
case Op.Bar:
DoBar();
break;
case Op.Baz:
DoBaz();
}
}
private void DoFoo()
{
// pushing and popping things from _internals, doing things to those States
}
private void DoBar()
{
// similarly large method to foo, but doing something much different to _internals
}
private void DoBaz()
{
// you get the idea...
}
}
Foo、Bar 和 Baz 是相当复杂的方法(不是很长,只是值得分开),所以我想将它们分解为具有公共接口的类,即策略模式。问题是,我无法封装_internals
在这些类中。我的意思是,我可以将它传递给Execute
那些类的方法,但这似乎是一个糟糕的方法。内部结构比单个操作更持久,因此策略类不能“拥有”内部结构本身。在这台机器上可以进行多种不同的操作,传入不同的Thingy。
您可以建议其他路线吗?
编辑
这是一种状态机,但并不是说一个操作仅在特定状态下有效。_internals
是一堆状态,而不仅仅是当前状态。这三个操作中的任何一个都可以随时进行。