More Related Content
Similar to Command パターン (20)
Command パターン
- 3. それってどんなん?
“ 要求をオブジェクトとしてカプセル化することによって、異な
る要求や、要求からなるキューやログにより、クライアントを
パラメータ化する。また、取り消し可能なオペレーションをサ
ポートする。
• 現代的な言語基盤ではイベントが似たようなし
”
くみになってるよ!
• こうすると…
• 複数の (Receiver に対する操作) 要求をまとめたり…
• 実行前までロールバックしやすくなったり…
• 気になってきました?
3
- 7. それってどんなん?
• a.k.a. “Command Manager”
• ICommand オブジェクトを…
– undo/redo スタックに追加したり
• こうすると取り消し操作でつかえるよ
• あとでおはなしするかも
– 実行キューに追加したり
• これでトランザクション処理を実現できるよ
• これもあとでしゃべるかも
• ICommand ってなに?
7
- 9. それってどんなん?
• Invoker 向けに API を定義
– Invoker と Receiver を仲介
– おもに保持している Receiver.Action (任意のメソッド) をよび
だすメソッドが定義される
• あと設定も…
– 実装では前処理を行ったりすることもある
• Receiver ってなんだっけ?
9
- 11. それって(略)
• ターゲット オブジェクトとも…つまり Receiver
オブジェクトに対してコマンドが実行される
• Receiver.Action がよびだされると…
– 実際にコマンドのメイン処理がはいる
• しゃべってるだけじゃわかりにくいですよね?
– ソースコードみていきましょう!
– 主役:やる夫 (左)
11
- 13. まとめ
• つまり…
– (コマンドの実行) 要求そのものをオブジェクトにしちゃう
• そうすると…
– いいとこ
• 最初に言ってたトランザクション処理とコマンド履歴の実装が
ちょっと楽になる
• ICommand オブジェクトはコマンドに関する設定を一時的に保持す
る空間として便利
– いくないとこ
• 使うべきか見極めるのがめんどくさい
• ICommand.Execute の引数が抽象的になりすぎて実装で困る!
13
- 14. 文献
• Command pattern - Wikipedia, the free encyclopedia
– http://en.wikipedia.org/wiki/Command_pattern
• デザインパターン第11回「Commandパターン」 -
Bug Catharsis
– http://d.hatena.ne.jp/zecl/20071008/p1
• Skeleton of GOF's Design Pattern
– http://www002.upp.so-
net.ne.jp/ys_oota/mdp/Command/index.htm
• 2ch全AAイラスト化計画
– http://riceballman.fc2web.com/AA-
Illust/Data/NyusokuDeYaruo.html
14