そこには多くのコマンドパターンの説明がありますが、それらのブログ/投稿で提供されている例を消化したり理解したりするのは少し
だから、ここでは私が理解した方法で説明しようとする。
コマンドパターンを理解するために、(少なくともインドでは)リモコンのない巨大なテレビがあった1990年代に戻ることができます。 古き良き時代;)
私たちは、オン/オフ、増加/減少ボリュームのためのすべてのノブを持っていた。
すべてが良かった、正常に動作し、唯一の問題は、誰かがテレビのオン/オフを切り替えたり、音量を下げたり増やしたりしたい場合、彼らはテレビに
今、これをオブジェクト指向の方法で考えてください。 TVは、操作/メソッド/関数または”コマンド”の束を持つオブジェクトです。 これらのコマンドを呼び出すために、TVオブジェクトに直接アクセスしています。
このアプローチの問題は?
- コマンドを呼び出すにはオブジェクトが必要です-したがって、テレビまで歩いてください
- すべてのテレビにはstart/stopの独自の実装があり、”Command invocation”
- “
どうすればこれを解決できますか?
テレビには、on/offなどの機能を実装し、これらのメソッド/操作を公開するインターフェイスがあり、インターフェイスのインスタンスを”別のオブジェクト”に与えると想像してみてください。 それは私たちの問題を解決することができます。 コードに入りましょう:
最初に、操作をオン/オフにするTVクラスを作成します。
同様に、ユニバーサルリモートを作成するときにセットトップボックスクラスを作成します。
デバイスとその操作を定義したので、TV/SetTopBoxのオブジェクトを保持してこれらの操作を呼び出すことができるクラス(コマンド)が必要です。
コマンドクラスを作成しましょう。 これらのデバイスで2つの操作を実行したいので、CommandクラスはIDeviceタイプのオブジェクトを「持つ」ことになります。
“ON”と”OFF”の二つのコマンドが必要です。
これらのOn/Offコマンドオブジェクトには、1つのexecute関数/メソッドがあり、それが持つデバイス上のそれぞれの操作を呼び出します。
気づいた場合は、「TVOnCommand」ではなく「OnCommad」という名前のクラスを作成しました。 アイデアは、異なるデバイスのコマンドクラスを再利用することです。 これは、任意のデバイスをサポートする私たちの普遍的なコマンドです。
これにより、普遍的なリモートを作成することができます。 ビンゴ!!!!
これまで、デバイスの操作を”コマンド”という形で抽象化してきました。 私たちのために残っている唯一のことは、RemoteControlを作成して、”コマンド”をトリガーすることです。
リモコンを作成する前に、ボタンを作成する必要があり、各ボタンはそれぞれのコマンドを実行します。
RemoteButtonクラスには、ボタンが押されたときに実行されるcommandオブジェクトがあります。
最後に、操作ごとに複数のボタンを持つリモートコントロールデバイスを作成しましょう。
(constructorを使用して)リモートコントロールデバイスを作成するときは、すべてのオブジェクトをインスタンス化して割り当てます。
上記のコードを見ると、リモコンに複数のボタンが定義されており、ユニバーサルリモコンを作成しようとしています。
私たちはすべてRemoteControlDeviceを作成して再生するように設定されています:)
出力:
TV is on!
TV is off!
SetTopBox is on!
SetTopBox is off!Process finished with exit code 0
出力に見られるように、デバイス上で一連の操作を実行するために、さまざまなボタンを押しました。
だから、要するに、アイデアは、彼らがテレビにすべての道を歩くか、テレビをオン/オフにするためにTVを与えるのではなく、クライアント(psvm/TVユーザー)にリモー
簡単な言葉で:
アイデアは、操作を別のオブジェクト(コマンド)にカプセル化し、再利用してから、デバイス操作を含むこれらのコマンドオブジェクトを実行するた
いつものように、あなたは私のGitHub上のすべてのコードを見つけることができます。