Command を Go で
Command は、 振る舞いに関するデザインパターンの一つで、 リクエストや簡単な操作をオブジェクトに変換します。
変換により、 コマンドの遅延実行や遠隔実行を可能にしたり、 コマンドの履歴の保存を可能にしたりできます。
概念的な例
Command パターンを、 テレビを例にとってみてみましょう。 テレビの電源を入れるには、 以下のどちらかを押します:
- リモコンのオンのボタン
- 実際のテレビのオンのボタン
「オンにする」 コマンド・オブジェクトの実装は、 テレビを受け手として開始します。 このコマンドの実行メソッドが呼ばれると、 それは次に TV.on
関数を呼び出します。 次に、 インボーカーを定義します。 実際のところ、 インボーカーは二つあります。 リモコンとテレビ自身です。 両方とも 「オンにする」 コマンド・オブジェクトを埋め込んでいます。
同じリクエストを複数のインボーカーでラップしていることに注目してください。 他のコマンドでも同様です。 別々のコマンド・オブジェクトを作成する利点は、 UI ロジックをビジネス・ロジックから切り離すことです。 インボーカーごとに異なるハンドラーを開発する必要はありません。 コマンド・オブジェクトには、 実行に必要なすべての情報が含まれています。 そのため、 遅延実行にも使用できます。