14
Command パターンのおはなし 2011年コードの旅 1

Command パターン

Embed Size (px)

Citation preview

Page 1: Command パターン

Command パターンのおはなし

2011年コードの旅

1

Page 2: Command パターン

COMMAND パターン

いいものでありますように…

2

Page 3: Command パターン

それってどんなん?

3

要求をオブジェクトとしてカプセル化することによって、異なる要求や、要求からなるキューやログにより、クライアントをパラメータ化する。また、取り消し可能なオペレーションをサ

ポートする。

“ ”

• 現代的な言語基盤ではイベントが似たようなしくみになってるよ!

• こうすると… • 複数の (Receiver に対する操作) 要求をまとめたり…

• 実行前までロールバックしやすくなったり…

• 気になってきました?

Page 4: Command パターン

それってどんなしくみ?

• ざっくりいうとユーザーとみっつのクラスにわかれるよ

• Client – コマンド使いたいやつ

• Command オブジェクトつくって

• Receiver を設定するよ

• Invoker – 操作要求を受けると Command を適切な順によびだすよ

• Command – 前処理とかして Receiver に仕事を投げるよ

• Receiver – 実際の処理をおこなうよ

4

Page 5: Command パターン

それってどんなしくみ?

5

Page 6: Command パターン

INVOKER クラス

Invoker

6

Page 7: Command パターン

それってどんなん?

• a.k.a. “Command Manager”

• ICommand オブジェクトを…

– undo/redo スタックに追加したり

• こうすると取り消し操作でつかえるよ

• あとでおはなしするかも

– 実行キューに追加したり

• これでトランザクション処理を実現できるよ

• これもあとでしゃべるかも

• ICommand ってなに?

7

Page 8: Command パターン

COMMAND インターフェース

ICommand

8

Page 9: Command パターン

それってどんなん?

• Invoker 向けに API を定義

– Invoker と Receiver を仲介

– おもに保持している Receiver.Action (任意のメソッド) をよびだすメソッドが定義される

• あと設定も…

– 実装では前処理を行ったりすることもある

• Receiver ってなんだっけ?

9

Page 10: Command パターン

RECEIVER クラス

Receiver

10

Page 11: Command パターン

それって(略)

• ターゲット オブジェクトとも…つまり Receiver

オブジェクトに対してコマンドが実行される

• Receiver.Action がよびだされると…

– 実際にコマンドのメイン処理がはいる

• しゃべってるだけじゃわかりにくいですよね?

– ソースコードみていきましょう!

– 主役:やる夫 (左)

11

Page 12: Command パターン

デモやるよ

12

Page 13: Command パターン

まとめ

• つまり…

– (コマンドの実行) 要求そのものをオブジェクトにしちゃう

• そうすると…

– いいとこ

• 最初に言ってたトランザクション処理とコマンド履歴の実装がちょっと楽になる

• ICommand オブジェクトはコマンドに関する設定を一時的に保持する空間として便利

– いくないとこ

• 使うべきか見極めるのがめんどくさい

• ICommand.Execute の引数が抽象的になりすぎて実装で困る!

13

Page 14: Command パターン

文献

• 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