2012-02-20 13 views
1

状態パターンの1つの側面の周りに私の頭を包み込むのに少し問題があります。私はウィキペディアなどで提供されている基本的な例を理解していますが、あなたのStateContextクラスが各状態に異なるタイマーで条件付き状態の変更を行っていたらどうなりますか?条件付き状態変更を伴う状態パターン

たとえば、状態がA,B,CおよびDであるとします。そして、私は状態ベースのタイマーに基づいて状態を変えたいと思う。例えば、Aで5秒間、Bで7秒間、Cで3秒間、Dで10秒間留まります。

誰がその期間を管理する必要がありますか?各州がその期間を認識すべきか?その場合、_duration属性をコピーして各状態に貼り付けて、Stateインターフェイスがその属性を持つ抽象基本クラスである必要があると思うかもしれません。

また、StateContextは期間を管理する必要がありますか?この場合、私は私の_stateのチェックをしていますかわいい感じ。

答えて

1

StateContextStateも状態の変化を管理する責任はありません。このパターンの外側から管理されているものです。 StateContextクラスの現在のStateインスタンスを変更するには、setState(...)メソッドまたは別のメソッドが必要です。

+0

大丈夫です。だから、いくつかの外部StateControllerクラスがStateContextの状態に基づいて決定し、それを知り、判断することは許容されるだろうか? – Ternary

+0

はい、もちろんです! :) – satoshi

+0

徹底的な答えに申し訳ありません。あなたはウィキペディアの例を見ていたと言いましたか?描画プログラムの例を見てください。 'StateContext'の状態変更を担当するUIです。ペンツールまたは選択ツールをクリックするたびに、 'StateContext'の' State'インスタンスが変更されます。今あなたはそれを見ますか? :) – satoshi

関連する問題