Stateパターン
「状況(State)」に応じて機能を変更するパターン。
状況の中で次の状況に変更してあげるというのがポイント。
メリット
状況を持たせることで、メインで条件分岐を多くしなくて良いので、ソースが複雑にならない。
状況が整理されていないと、Stateクラスの中が複雑になりそう。
予め、フローがあると分かりやすいだろう。
テンプレートパターンとの違い
プログラムを見ていると、テンプレートパターンとどう違うのだろうと思った。
テンプレートパターン(横へ広がるパターン)
・状況という概念がない。
・型が決まっているところに対して、様々な型を用意できる。
・異なる処理を一つの流れのように用意し、その振る舞いを実装する。
Stateパターン(縦に伸びるパターン)
・状況により処理を変える。(様々な流れを作ることができる。)
クラス図
コード
全然条件分岐してないが、Stateが振る舞いを決めているのがわかる
public interface IState
{
}
{
IState state = null;
public void setState(IState obj)
{
state = obj;
}
public void laundry()
{
state = new Wash();
while(state != null)
{
state.doAction(this);
}
Console.WriteLine("終わりました。");
}
}
public class Wash:IState
{
{
Console.WriteLine("Washed");
obj.setState(new Rinse());
}
}
public class Rinse:IState
{
{
Console.WriteLine("Rinsed");
obj.setState(new Dehydration());
}
}
public class Dehydration:IState
{
{
Console.WriteLine("Dehydarated");
obj.setState(null);
}
}
参考
【プログラミング講座(C#)】第104回 Stateパターンについて【独り言】 - YouTube