Command pattern
構成要素
- Command クラス
- オペレーションを実行するためのインターフェイスを宣言する。
- ConcreteCommand クラス(PasteCommand クラスとか)
- Receiver オブジェクトとアクションの間の継りを定義する
- Receiver オブジェクトに対して該当するオペレーションの呼び出しを行うように実装する。
- Client クラス(Application クラスとか)
- ConcreteCommand オブジェクトを生成して、それに対する Receiver オブジェクトを設定する。
- Invoker クラス(MenuItem クラスとか)
- Command オブジェクトに要求を実行するように依頼する。
- Receiver クラス(Document クラスとか)
- 要求を実現するためにオペレーションをいかに実行するかを知っているクラス。任意のクラスが Receiver になり得る。
強調関係
- Client オブジェクトは ConcreteCommand オブジェクトを生成して、それに対する Receiver オブジェクトを明確にする。
- Invoker オブジェクトは ConcreteCommand を保持する。
- Invoker オブジェクトは ConcreteCommand オブジェクトに対して、Execute オペレーションの呼び出しを行うことにより要求を送出する。これを取消し可能にする場合、ConcreteCommand オブジェクトは実際に取消しを行うときのために Execute オペレーションが呼び出される前の状態を保存しておく。
- ConcreteCommand オブジェクトは Receiver オブジェクトに対して、要求を実行するオペレーションの呼び出しを行う。
結果