
6.10
コマンド
203
6.10.1
柔軟なパターン
既に述べたように、
JavaScript
ではコマンドパターンはいろいろな方法で実装できます。実装の幅広
さを実感できるよう、そのうちのいくつかを実例を使って示します。
6.10.1.1
タスクパターン
もっとも基本的で自明な「タスクパターン」から始めましょう。ある操作を後から呼び出す機能をもっ
たオブジェクトを
JavaScript
で作成するのにもっとも簡単な方法はクロージャを作ることです。
function createTask(target, args) {
return () => {
target.apply(null, args);
}
}
これには何も目新しいことはありません。この本の中でこのパターンを既に何度も使っており、特に
3
章で頻繁に使いました。この技法を使うと、処理の実行を制御して実際の実行を先延ばしするのに別
のコンポーネントを使
うことができるようになります。これは、コマンドパターンの
Invoker
(起動役)
と実質的には同じものです。たとえば、ライブラリ
async
に渡すために処理をどのように定義したか
を思い出してください。よりよい例は、ジェネレータと組み合わせてサンク(
thunk
)をどのように使っ
たかでしょう。コールバックのパターン自体が非常にシンプルな形のコマンドパターンと考えられます。
6.10.1.2
より複雑なコマンド
より複雑なコマンドの例を見てみましょう。今度は「アンドゥ」と「シリアライゼーション」をサポート
します ...