Command パターンのおはなし     2011年コードの旅                    1
いいものでありますように…COMMAND パターン                2
それってどんなん?“   要求をオブジェクトとしてカプセル化することによって、異な    る要求や、要求からなるキューやログにより、クライアントを    パラメータ化する。また、取り消し可能なオペレーションをサ    ポートする。• 現代的な言...
それってどんなしくみ?• ざっくりいうとユーザーとみっつのクラスにわかれるよ• Client   – コマンド使いたいやつ      • Command オブジェクトつくって      • Receiver を設定するよ• Invoker   ...
それってどんなしくみ?              5
InvokerINVOKER クラス              6
それってどんなん?• a.k.a. “Command Manager”• ICommand オブジェクトを…  – undo/redo スタックに追加したり    • こうすると取り消し操作でつかえるよ    • あとでおはなしするかも  – ...
ICommandCOMMAND インターフェース                   8
それってどんなん?• Invoker 向けに API を定義  – Invoker と Receiver を仲介  – おもに保持している Receiver.Action (任意のメソッド) をよび    だすメソッドが定義される    • あ...
ReceiverRECEIVER クラス               10
それって(略)• ターゲット オブジェクトとも…つまり Receiver  オブジェクトに対してコマンドが実行される• Receiver.Action がよびだされると… – 実際にコマンドのメイン処理がはいる• しゃべってるだけじゃわかりにく...
デモやるよ        12
まとめ• つまり… – (コマンドの実行) 要求そのものをオブジェクトにしちゃう• そうすると… – いいとこ   • 最初に言ってたトランザクション処理とコマンド履歴の実装が     ちょっと楽になる   • ICommand オブジェクトは...
文献• Command pattern - Wikipedia, the free encyclopedia   – http://en.wikipedia.org/wiki/Command_pattern• デザインパターン第11回「Comm...
Upcoming SlideShare
Loading in …5
×

Command パターン

698 views

Published on

ずっと前に学校で。

内容が近視眼的に見えなくもない

  • Be the first to comment

  • Be the first to like this

Command パターン

  1. 1. Command パターンのおはなし 2011年コードの旅 1
  2. 2. いいものでありますように…COMMAND パターン 2
  3. 3. それってどんなん?“ 要求をオブジェクトとしてカプセル化することによって、異な る要求や、要求からなるキューやログにより、クライアントを パラメータ化する。また、取り消し可能なオペレーションをサ ポートする。• 現代的な言語基盤ではイベントが似たようなし ” くみになってるよ!• こうすると… • 複数の (Receiver に対する操作) 要求をまとめたり… • 実行前までロールバックしやすくなったり… • 気になってきました? 3
  4. 4. それってどんなしくみ?• ざっくりいうとユーザーとみっつのクラスにわかれるよ• Client – コマンド使いたいやつ • Command オブジェクトつくって • Receiver を設定するよ• Invoker – 操作要求を受けると Command を適切な順によびだすよ• Command – 前処理とかして Receiver に仕事を投げるよ• Receiver – 実際の処理をおこなうよ 4
  5. 5. それってどんなしくみ? 5
  6. 6. InvokerINVOKER クラス 6
  7. 7. それってどんなん?• a.k.a. “Command Manager”• ICommand オブジェクトを… – undo/redo スタックに追加したり • こうすると取り消し操作でつかえるよ • あとでおはなしするかも – 実行キューに追加したり • これでトランザクション処理を実現できるよ • これもあとでしゃべるかも• ICommand ってなに? 7
  8. 8. ICommandCOMMAND インターフェース 8
  9. 9. それってどんなん?• Invoker 向けに API を定義 – Invoker と Receiver を仲介 – おもに保持している Receiver.Action (任意のメソッド) をよび だすメソッドが定義される • あと設定も… – 実装では前処理を行ったりすることもある• Receiver ってなんだっけ? 9
  10. 10. ReceiverRECEIVER クラス 10
  11. 11. それって(略)• ターゲット オブジェクトとも…つまり Receiver オブジェクトに対してコマンドが実行される• Receiver.Action がよびだされると… – 実際にコマンドのメイン処理がはいる• しゃべってるだけじゃわかりにくいですよね? – ソースコードみていきましょう! – 主役:やる夫 (左) 11
  12. 12. デモやるよ 12
  13. 13. まとめ• つまり… – (コマンドの実行) 要求そのものをオブジェクトにしちゃう• そうすると… – いいとこ • 最初に言ってたトランザクション処理とコマンド履歴の実装が ちょっと楽になる • ICommand オブジェクトはコマンドに関する設定を一時的に保持す る空間として便利 – いくないとこ • 使うべきか見極めるのがめんどくさい • ICommand.Execute の引数が抽象的になりすぎて実装で困る! 13
  14. 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 GOFs 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

×