Command パターン

Command パターン（）は命令/動作をオブジェクトで表現するオブジェクト指向プログラミングデザインパターンの一種である。
リクエストのために必要な手続きとデータをCommandオブジェクトとしてカプセル化した上で取り回し、必要に応じてExecute（実行）するパターンである。オブジェクトであることを生かして命令のキューイングやロギング、Undo等が可能になり、Executeを分離したことで手続きと実行を疎結合にできる。
定義.
Commandパターンでは何かリクエストを実行する際、単純に処理を実行するのではなく、次のステップを踏む。
すなわちリクエストを「手順書」の定義・生成とその「実行」に段階分けするパターンをとる。
Commandが内包する処理の記述は開発者に一任されている。全ての処理をCommand内に記述するパターン、あるいはcodice_4インスタンス生成時に実行対象（codice_5）を受け取りcodice_6時にcodice_7コールのみをおこなう、すなわち実行をcodice_5に委譲してcodice_1は繋ぎに徹するパターンもある。尚 Receiver は Commandパターンの要件ではない。
codice_1はcodice_11、codice_12あるいはcodice_13とも呼ばれる。
利点.
このパターンがもつ利点の1つはリクエスト依頼処理と実装処理の分離（疎結合）である。
例えばクリックでリクエストを実行できるUIフレームワークを開発するとする。ボタンのクリック機能とリクエストの実行はフレームワークの責務だが、リクエストで具体的に何が起こるかはアプリケーションの責務である。すなわちUIフレームワーク側はクリックに応じてリクエストを発行するが、リクエストに対してどのような処理がおこなわれるのか、そもそもリクエストの受け手が誰なのか知らない。ここでボタンの生成時にcodice_1を受け入れるとする。UIフレームワーク側はcodice_1がどんな処理を内包しているかは（カプセル化されているので）わからないが、codice_16を実行すればリクエストが実行されることは知っている。このinterfaceを介した契約により、クリック時にcodice_6するだけでクリックに応答したリクエストを実行できる。このようにCommandパターンはCommandの実行と実装を疎結合にできる。言い換えれば、Commandパターンはcodice_1オブジェクトのDIによる処理と実行の分離（関心の分離）である。これは手続き型プログラミングにおけるcallbackに相当する。
このパターンがもつもう1つの利点はCommandが独立したオブジェクトである点である。未実行のcodice_1オブジェクトを配列にいれればキューイングが可能であり、それに応じた非同期処理・スケジューリングが可能になり、実行済みのcodice_1をキューイングすれば履歴保存とロギング・Undoなどが可能になる。
利用例.
例としてプリンターによる印刷を考える。
手続き的に実装する場合、印刷設定を引数にとり印刷を実行するcodice_21 関数を叩けばよい。
Commandパターンで実装する場合、codice_16 内に印刷手続きを含むcodice_23 Commandを用意する。ユーザーは印刷時にcodice_23 オブジェクトを作成し、印刷するドキュメント・印刷部数などのパラメータをCommandへセット、最後にプリンターへのcodice_23 送信メソッドを呼び出す。プリンター側はCommandをキューイングし準備が出来次第codice_26を実行する。
印刷にCommandパターンを利用する利点は以下である。
活用例.
Command オブジェクトは下記のような機能を実現するのに便利である: