Command は、 振る舞いに関するデザインパターンの一つで、 リクエストや簡単な操作をオブジェクトに変換します。
変換により、 コマンドの遅延実行や遠隔実行を可能にしたり、 コマンドの履歴の保存を可能にしたりできます。
複雑度:
人気度:
使用例: Command パターンは、 Java コードではよく見かけます。 最もよく使われるのは、 UI 要素をアクションでパラメーター化する時のコールバックの代わりとしてです。 また、 タスクをキューに入れたり、 操作履歴の管理などでも使われます。
Java のコア・ライブラリーでの Command の使用例です:
見つけ方: 特定の操作 (コピー、 切り取り、 ペースト、 送信、 印刷など) を表す、 関連したクラスの集まりを見つけたら、 Command パターンを使用しているかもしれません。 これらのクラスは、 同一のインターフェースか抽象クラスを実装しているはずです。 コマンドは、 関連する操作を独自に実装するかもしれませんし、 別個のオブジェクト ( 「受け手」) に作業を委任するかもしれません。 このパターンの識別に必要な最後の段階は、 インボーカー (送り手) を特定することです。 メソッドやコンストラクターのパラメーターにコマンド・オブジェクトを受け付けるようなクラスを探してみてください。
テキスト・エディターのコマンドと取り消し操作
この例のテキスト・エディターは、 ユーザーが何らかの操作をするたびに新しいコマンド・オブジェクトを作成します。 コマンドは、 そのアクションの実行後に、 履歴スタックにプッシュされます。
ここで、 取り消し操作を実行します。 アプリケーションは、 履歴から最後に実行されたコマンドを取り出し、 逆のことを行うアクションを実行するか、 そのコマンドによって保存されたエディターの過去の状態を復元します。
commands
commands/Command.java: コマンドの抽象基底クラス
commands/CopyCommand.java: 選択されたテキストをクリップボードへコピー
commands/PasteCommand.java: クリップボードからテキストをペースト
commands/CutCommand.java: クリップボードへテキストを切り取り
commands/CommandHistory.java: コマンド履歴
editor
editor/Editor.java: テキスト・エディターの GUI
Demo.java: クライアント・コード
OutputDemo.png: 実行結果