命令模式
命令模式(Command Pattern)是一種行為型設計模式,它將請求封裝成一個物件,從而允許你使用不同的請求、佇列或者日誌請求來引數化其他物件。命令模式也支援撤銷操作。
下面是一個簡單的Java程式碼示例,演示了命令模式的實現:
// 命令介面
interface Command {
void execute();
}
// 具體命令類
class ConcreteCommand implements Command {
private Receiver receiver;
public ConcreteCommand(Receiver receiver) {
this.receiver = receiver;
}
public void execute() {
receiver.action();
}
}
// 接收者類
class Receiver {
public void action() {
System.out.println("Receiver executes the command.");
}
}
// 呼叫者類
class Invoker {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void executeCommand() {
command.execute();
}
}
// 客戶端程式碼
public class CommandPatternExample {
public static void main(String[] args) {
Receiver receiver = new Receiver();
Command command = new ConcreteCommand(receiver);
Invoker invoker = new Invoker();
invoker.setCommand(command);
invoker.executeCommand();
}
}
在上述示例中,我們定義了一個命令介面 Command
,其中包含一個 execute()
方法。
然後,我們實現了具體命令類 ConcreteCommand
,它實現了 Command
介面,並持有一個接收者物件 Receiver
。
接著,我們定義了接收者類 Receiver
,其中包含一個 action()
方法,用於執行實際的操作。
在呼叫者類 Invoker
中,我們透過 setCommand()
方法設定要執行的命令,然後透過 executeCommand()
方法執行命令。
在客戶端程式碼中,我們建立了接收者物件 receiver
和具體命令物件 command
,並將命令物件設定到呼叫者物件 invoker
中。最後,呼叫 invoker.executeCommand()
執行命令。
命令模式的關鍵思想是將請求封裝成一個物件,使得請求的傳送者和接收者解耦,從而可以靈活地處理請求、撤銷操作或者記錄日誌等。這種方式可以方便地新增新的命令,支援請求的排隊和延遲執行,並可以實現命令的撤銷和重做操作。