おそらく、戦略パターンは私が求めているものではありません。私のコードが次のようになっているとします(疑似バージョン):
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 を使用して、このマシンで複数の異なる操作を実行できます。
あなたが提案できる別のルートはありますか?
編集
これは一種のステート マシンですが、1 つの操作が特定の状態でのみ有効であるという意味ではありません。_internals
現在の状態だけでなく、状態のスタックです。3 つの操作はいつでも実行できます。