ユーザーが実際に作成するのは、上記のTurnStyleContextクラスのみです。
後は State Map Compiler が生成してくれます。
επιστημη氏のWebページにも
State Map Compiler に関するドキュメントがあります。
あります。
GoFのStateパターン(Gamma本)にいくらか類似していますが、状態を変更するメソッド
の可視性が public になっているので、折角作成した遷移体系を壊すコーディングを間違って
許す可能性があります。この点で、Stateパターンに劣ると私は思います。
詳細なクラス図を見れば分かりやすいと思いますが、
ユーザーに解放するインターフェイスが各イベントの関数と、状態を参照する関数のみ
に限定され不用意なコーディングによる状態変化を抑止しています。Stateパターンは、
状態の具象クラスにSingletonパターンを利用して、各オブジェクトが唯一しか
存在しないことを守らせています。State Map Compilerが生成したコードは、TrunStyleクラスに
状態の具象クラスの各インスタンスをクラス属性として置くことで、その代替としています。
構成の都合上、そのインスタンスも可視性が public: となっているので、これまた危険でした。
汚いですがStateパターンに変形させたソースは
ここです。このコード変更は人間(私)がキーパンチしました:-P
TurnStyleクラスはTurnStyleState抽象クラスをfriend宣言しています。これをうまく
利用して且つ、TurnStyleStateクラスのメソッドを呼ぶ時には自分の参照を渡して委譲しています。
[参考]
Gamma本:「オブジェクト指向における再利用のためのデザインパターン 改訂版」Erich Gamma/ Richard Helm/ Ralph Johnson/ John Vlissides
POSA:「ソフトウェア ソフトウェア開発のためのパターン体系」Frank Buscchmann/ Regine Meunier/ Hans Rohnert/ Peter Sommerlad/ Michael Stal
by masu
e-mail: massun.masumoto@nifty.ne.jp
URL : http://member.nifty.ne.jp/~masumoto/