子供の頃に見た映画で、秘密の部屋に入るために特定の手順が必要だった。
この考え方に基づいたセキュリティシステムを考えてみる。反応してメッセージを送信するセンサーやコマンドを受け付ける装置など。
制御プログラム(コントローラ)はJavaで書かれている。
制御プログラムに注目し、個々のニーズについて調べると共通のパターンを見つけられる。
ほとんどのコンポーネントと振る舞い(例ではメッセージの送受信方法)は共有しており、 いくつかの重要な違い(例ではイベントやコマンドの流れ)がある。
コントローラをステートマシンとして考えるのが良い方法である。
ステートマシンはDSLの良い例になる。
数多くのパターンから一つ(グラント嬢)に着目し、状態遷移図に表す。
イベントが発生すると、ある状態から別の状態に遷移する。このモデルでは状態に入った時に動作が発生する。
ここでは普通のステートマシンとは違い、リセットイベントにより遷移するアイドル状態を持つ。
まず通常のステートマシンからはじめて、後からリセットイベントを追加する。
ここでは、あらゆる状態から{0}doorOpened{/0}をトリガーにしてアイドル状態になる遷移を追加した。