Command Pattern
コマンドモードの例
コマンド・オブジェクトは、特定の受信および関連付けられた一連の動作によって需要をカプセル化します.
次のコード例では、SimpleRemoteControl
はInvokerクラス、LightOnCommnad
はCommandクラス、Light
はReceiverクラス、RemoteControlTest
はクライアントクラスである.
reference code
SimpleRemoteControl.java (Invoker)SimpleRemoteControl
は、Command
オブジェクトを含む.ボタンが押されると、Command
関数が呼び出され、実際のオブジェクトが何であれ、何をしているかにかかわらず呼び出されます.public class SimpleRemoteControl {
Command slot;
public SimpleRemoteControl() { }
public void setCommand(Command command) {
this.slot = command;
}
public void buttonWasPressed() {
slot.execute();
}
}
Command.javapublic interface Command {
void execute();
}
LightOnCommand.java (Command)execute
は、トランシーバオブジェクトを参照する.このトランシーバは、クライアントから注入されるトランシーバである.public class LightOnCommand implements Command {
Light light;
public LightOnCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.on();
}
}
RemoteControlTest.java (Client)
クライアント(Client)には、コマンドオブジェクトとコレクタオブジェクトが含まれ、コレクタオブジェクトがコマンドオブジェクトに注入されます.したがって、LightOnCommand
関数がコマンドオブジェクトで呼び出されると、注入されたコレクタオブジェクトに対して特定の操作が実行されます.public class RemoteControlTest {
public static void main(String[] args) {
SimpleRemoteControl remote = new SimpleRemoteControl();
Light light = new Light();
LightOnCommand lightOn = new LightOnCommand(light);
remote.setCommand(lightOn);
remote.buttonWasPressed();
Garage garage = new Garage();
GarageDoorOpenCommand garageDoorOpen = new GarageDoorOpenCommand(garage);
remote.setCommand(garageDoorOpen);
remote.buttonWasPressed();
}
}
カスタムパターン(Command Pattern)の定義
「Head First Design Patterns」で定義したコマンド・アレイの定義は次のとおりです.
コマンドモード(Command Pattern)
コマンドモードを使用して、要求をオブジェクトにカプセル化するか、パラメータを使用して異なる要求を受け入れることができます.また、リクエスト履歴をキューに保存したり、ログとして記録したりして、キャンセル操作をサポートすることもできます.
コマンド・モードの使用
リクエストをキューに保存
カスタムオブジェクトを使用すると、計算された一部をパッケージ化(トランシーバと一連の動作)し、オブジェクトとして渡すこともできます.これは、スケジューラ、スレッドプール、およびタスクキューに使用できます.
ワークキューを表示すると、コマンド・オブジェクトがキューに積み重ねられ、どのような操作が行われているか分かりません.次に、コマンドがどのような操作を実行しても、コマンドオブジェクトexexcute
を順次インポートして呼び出す.
要求をログに書き込む
アプリケーションのダウンタイム時に古いレコードを復元する機能を追加できます.execute
インターフェースにCommand
およびstore()
が追加され、load()
が呼び出されるたびにexecute()
が実行される.アプリケーションが停止した場合は、store()
でリカバリできます.
しかし、データ構造の膨大なアプリケーションでは、関数load()
のオーバーヘッドがますます大きくなります.この場合は、リクエストをログに書き込んでください.アプリケーションがダウンタイムした場合、ログ・リカバリ・システムを使用できます.
Reference
この問題について(Command Pattern), 我々は、より多くの情報をここで見つけました
https://velog.io/@ye-geeee/Command-Pattern
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
public class SimpleRemoteControl {
Command slot;
public SimpleRemoteControl() { }
public void setCommand(Command command) {
this.slot = command;
}
public void buttonWasPressed() {
slot.execute();
}
}
public interface Command {
void execute();
}
public class LightOnCommand implements Command {
Light light;
public LightOnCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.on();
}
}
public class RemoteControlTest {
public static void main(String[] args) {
SimpleRemoteControl remote = new SimpleRemoteControl();
Light light = new Light();
LightOnCommand lightOn = new LightOnCommand(light);
remote.setCommand(lightOn);
remote.buttonWasPressed();
Garage garage = new Garage();
GarageDoorOpenCommand garageDoorOpen = new GarageDoorOpenCommand(garage);
remote.setCommand(garageDoorOpen);
remote.buttonWasPressed();
}
}
「Head First Design Patterns」で定義したコマンド・アレイの定義は次のとおりです.
コマンドモード(Command Pattern)
コマンドモードを使用して、要求をオブジェクトにカプセル化するか、パラメータを使用して異なる要求を受け入れることができます.また、リクエスト履歴をキューに保存したり、ログとして記録したりして、キャンセル操作をサポートすることもできます.
コマンド・モードの使用
リクエストをキューに保存
カスタムオブジェクトを使用すると、計算された一部をパッケージ化(トランシーバと一連の動作)し、オブジェクトとして渡すこともできます.これは、スケジューラ、スレッドプール、およびタスクキューに使用できます.
ワークキューを表示すると、コマンド・オブジェクトがキューに積み重ねられ、どのような操作が行われているか分かりません.次に、コマンドがどのような操作を実行しても、コマンドオブジェクトexexcute
を順次インポートして呼び出す.
要求をログに書き込む
アプリケーションのダウンタイム時に古いレコードを復元する機能を追加できます.execute
インターフェースにCommand
およびstore()
が追加され、load()
が呼び出されるたびにexecute()
が実行される.アプリケーションが停止した場合は、store()
でリカバリできます.
しかし、データ構造の膨大なアプリケーションでは、関数load()
のオーバーヘッドがますます大きくなります.この場合は、リクエストをログに書き込んでください.アプリケーションがダウンタイムした場合、ログ・リカバリ・システムを使用できます.
Reference
この問題について(Command Pattern), 我々は、より多くの情報をここで見つけました
https://velog.io/@ye-geeee/Command-Pattern
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(Command Pattern), 我々は、より多くの情報をここで見つけました https://velog.io/@ye-geeee/Command-Patternテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol