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 オブジェクトに対して、要求を実行するオペレーションの呼び出しを行う。

結果