状態パターンの1つの側面の周りに私の頭を包み込むのに少し問題があります。私はウィキペディアなどで提供されている基本的な例を理解していますが、あなたのStateContext
クラスが各状態に異なるタイマーで条件付き状態の変更を行っていたらどうなりますか?条件付き状態変更を伴う状態パターン
たとえば、状態がA
,B
,C
およびD
であるとします。そして、私は状態ベースのタイマーに基づいて状態を変えたいと思う。例えば、Aで5秒間、Bで7秒間、Cで3秒間、Dで10秒間留まります。
誰がその期間を管理する必要がありますか?各州がその期間を認識すべきか?その場合、_duration
属性をコピーして各状態に貼り付けて、State
インターフェイスがその属性を持つ抽象基本クラスである必要があると思うかもしれません。
また、StateContext
は期間を管理する必要がありますか?この場合、私は私の_state
のチェックをしていますかわいい感じ。
大丈夫です。だから、いくつかの外部StateControllerクラスがStateContextの状態に基づいて決定し、それを知り、判断することは許容されるだろうか? – Ternary
はい、もちろんです! :) – satoshi
徹底的な答えに申し訳ありません。あなたはウィキペディアの例を見ていたと言いましたか?描画プログラムの例を見てください。 'StateContext'の状態変更を担当するUIです。ペンツールまたは選択ツールをクリックするたびに、 'StateContext'の' State'インスタンスが変更されます。今あなたはそれを見ますか? :) – satoshi