関連記事のトップページ |
---|
[シリーズ] Python におけるデザインパターンの記録 |
概要
State Pattern (状態) の「採用可否の基準」と「実践例」を記す.
参考情報は下記書籍である.
引用元情報 | 一言 |
---|---|
書籍 -- 独習デザインパターンC++ |
採用の基準
ここは独断もしくは私の解釈です.
採用基準は次のどちらかを満すこと.
・「状態」に応じて処理が異なること
・分岐フラグが複雑になりそうな見込み大であること
言い換えると次である.
・フラグ乱立回避のために State Pattern を採用する
個人的感想
Python で State pattern を実現する場合は、サードパーティパッケージである
「Transitions」を使用している.
次のように、Transitions の記事は @noca 様がまとめてくださっていて、
とても学習が進めやすかった.
なお、Transitions の欠点は以下だと思う.
・学習コストがやや大きいこと1.
・他者が Transitions を知らない確率大なので、チーム開発では注意が必要.
記事名 | 概要 |
---|---|
Pythonで状態遷移(transitions) | transitionsパッケージのチュートリアル |
Pythonの状態遷移パッケージ(transitions)を理解する【準備編】 | transitionsパッケージのインストール およびグラフ出力を実現するための設定方法 |
Pythonの状態遷移パッケージ(transitions)を理解する【状態編1】 | 状態の定義や各種設定などの詳細 |
Pythonの状態遷移パッケージ(transitions)を理解する【状態編2】 | 状態へのタグ付け、終端状態例外の詳細 |
Pythonの状態遷移パッケージ(transitions)を理解する【状態編3】 | 状態毎のクラスインスタンス生成、 状態タイムアウト設定、独自状態の定義 |
Pythonの状態遷移パッケージ(transitions)を理解する【遷移編1】 | ユーザ定義遷移やコールバック、 ガード判定等に関する詳細 |
Pythonの状態遷移パッケージ(transitions)を理解する【遷移編2】 | ユーザ定義外遷移に関する詳細 |
Pythonの状態遷移パッケージ(transitions)を理解する【コールバック編1】 | コールバックの種類や実施順序に関する詳細 |
Pythonの状態遷移パッケージ(transitions)を理解する【コールバック編2】 | コールバックにデータを与える方法、 キューについての詳細 |
Pythonの状態遷移パッケージ(transitions)を理解する【HSM編1】 | 階層型ステートマシンの基本動作の紹介 |
Transitions の使用例
その1
とある監視システムの状態遷移図である.
これを Transitions を使って実装した.
ただし、この規模であれば Transitions を使う必要は無いと思う (学習コストに見合わない)
素直に状態を基準にして遷移させている.
なお、図の数値は遷移順を、数値に付与した「t」と「f」は
直前の状態での終了値 True と False を意味する.
その2
とある監視システムの状態遷移図.
これを Transitions を使って実装した.
この規模になれば、Transitions の習得コストに見合う
フラグが乱立しそうなことが目に見えていたので、
2台の Database (DB-A と DB-B) へのアクセス自体を状態とみなして
ステートマシンにした例である.
重要な点としては、Transitions は HSM と呼ばれる入れ子状にも対応していることである.
下図は HSM 構造になっていて、とても複雑な遷移だが、
Transitions を採用することでフラグが乱立することなく実装できた.
以上.
-
私の場合は、同僚が Transitions を使った実装をしていて見本が存在していたが、それでもチュートリアルおよびnoca様の記事を完遂するまでに3日間(24h)要した ↩