Java デザインパターン : Command パターンについて

平成 17 年 12 月 02 日
近畿大学理工学部情報学科
電子商取引研究室
上田 翔太
Java デザインパターン : Command パターンについて
1 Command パターンの概要
Command パターンはリクエストを受け取ってアクショ
ンを実行するタイプのプログラムでよく使われる。利点は
以下の通りである。
Invoker、Client、Receiver は上記を遵守する内容ならば
形式は問わない。つまり、Java のクラスだけで適用する
のでは無く、それ以外で用いられるということだ。
3 Command パターンの適用例
3.1
1. 将来追加されるであろうリクエストに対応しやすく
なる。
2. アクションを実行する際にスレッドを用いてバッググ
四則演算アプリ
まず最初に簡単な Command パターンを適用した四則
演算アプリを例を以下に示していくことにする。
3.2
UML
3.3
内容
ラウンドで処理を実装しやすい。
3. 実行内容の履歴を保持し、再実行が容易に可能である。
4. 実行履歴を保持しているため、アンドゥ処理 (取消処
理) を実装しやすい。
まず最初に簡単な Command パターンを適用した四則演
算アプリを例を以下に示していくことにする。
2 Command パターンの UML
CalcCommand クラスは今回のパターンの Command
オブジェクトにあたり、CalcCommand を実装している
*CommandImpl クラスが ConcreteCommand オブジェ
クトにあたいする。execute メソッドの引数は各自任意で
指定し、計算結果を System.out.println 等でコンソール上
へ印字する。
Calculator クラスは*CommandImpl クラスのインスタ
ンスを生成し、java.util.Map へ格納する。今回 Map の
キーは String 型で、要素は CalcCommand 型とする。
getCalculator メソッドは引数として計算したい演算子を
• Command : 全ての ConcreteCommand に共通する
代入し、その演算子に対応する CalcCommand クラスを
インターフェイスを提供するオブジェクト。execute
Map.get メソッドを用いて抽出する。
メソッドを定義している。
CalcMain クラスは動作確認クラスとし、Calculator イン
• ConcreteCommand : Command インターフェイス
スタンスを生成し getCalculator メソッドを実行して計
を実装するクラス。各リクエストに対応する個々の処
算したい CalcCommand インスタンスを取得する。その
理を実装したオブジェクト。
後、そのインスタンスの exeute メソッドを実行して計算
• Invoker : execute メソッドを呼び出すオブジェクト。
させる。
• Client : ConcreteCommand のインスタンスを必要
3.4
に応じて生成するオブジェクト。
• Reciver : ConcreteCommand の execute メソッドを
実行する際、その処理の対象となるオブジェクト。
プログラ厶
以下の URL にサンプルプログラムを配置している。
http://ecl.info.kindai.ac.jp/ ueda/archives/CalcCmdPattern.zip