State パターン
ドローソフトを例に取る。このプログラムは任意の時点においてさまざまなツールのうちの1つとして振る舞うマウスカーソルを持つ。複数のカーソルオブジェクトを切り替える代わりに、カーソルは現在使用されているツールを表す内部的な状態を保持する。(例えばマウスクリックの結果として)ツールに依存するメソッドが呼ばれると、メソッド呼び出しはカーソルの状態へと渡される。
各ツールは1つの状態に対応している。共有される抽象状態クラスはAbstractToolである。
この定義により、各ツールはマウスカーソルの移動およびクリック/ドラッグの開始と終了を扱わなければならない。
その基底クラスを用い、単純なペンと範囲選択の各ツールを定義すると以下のようになる。
この例では、コンテキストのためのクラスはCursorと呼ばれている。