Design patterns
コマンドパターン
サーチ…
Javaにおけるコマンドパターンの例
ウィキペディアの定義:
コマンドパターンは、動作を実行するために必要なすべての情報をカプセル化するためにオブジェクトを使用したり、後でイベントをトリガする動作デザインパターンです
dofactoryの UML図:
基本的なコンポーネントとワークフロー:
-
Command
、execute()
ような抽象コマンドのインタフェースを宣言します。 -
Receiver
は特定のコマンドの実行方法を知っています -
Invoker
はConcreteCommand
保持していますが、実行する必要があります -
Client
はConcreteCommand
を作成し、Receiver
を割り当てます -
ConcreteCommand
はCommand
とReceiver
間のバインディングを定義します
このようにして、コマンドパターンは、 Sender (クライアント)をReceiverからInvokerに切り離します。 Invokerは、特定の操作を実行するために呼び出されるReceiverと、 Commandが実行されるCommandとCommandが完全に分かっています。
コードスニペット:
interface Command {
void execute();
}
class Receiver {
public void switchOn(){
System.out.println("Switch on from:"+this.getClass().getSimpleName());
}
}
class OnCommand implements Command{
private Receiver receiver;
public OnCommand(Receiver receiver){
this.receiver = receiver;
}
public void execute(){
receiver.switchOn();
}
}
class Invoker {
private Command command;
public Invoker(Command command){
this.command = command;
}
public void execute(){
this.command.execute();
}
}
class TV extends Receiver{
public String toString(){
return this.getClass().getSimpleName();
}
}
class DVDPlayer extends Receiver{
public String toString(){
return this.getClass().getSimpleName();
}
}
public class CommandDemoEx{
public static void main(String args[]){
// On command for TV with same invoker
Receiver receiver = new TV();
Command onCommand = new OnCommand(receiver);
Invoker invoker = new Invoker(onCommand);
invoker.execute();
// On command for DVDPlayer with same invoker
receiver = new DVDPlayer();
onCommand = new OnCommand(receiver);
invoker = new Invoker(onCommand);
invoker.execute();
}
}
出力:
Switch on from:TV
Switch on from:DVDPlayer
説明:
この例では、
- コマンドインタフェースは
execute()
メソッドを定義します。 - OnCommandはConcreteCommandで 、
execute()
メソッドを実装execute()
ます。 - レシーバは基本クラスです。
- TVとDVDPlayerはReceiverの 2つのタイプで、OnCommandのようなConcreteCommandに渡されます。
- Invokerにはコマンドが含まれています。これは、SenderとReceiverを分離するための鍵です。
- InvokerはReceiver (TV)を呼び出してこのコマンドを実行するOnCommand - >を受け取ります。
Invokerを使用することで、TVとDVDPlayerを切り替えることができます。このプログラムを拡張すると、TVとDVDPlayerの両方がオフになります。
主な使用例:
- コールバックメカニズムを実装するには
- アンドゥとリドゥ機能を実装するには
- コマンドの履歴を維持する
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow