10.21

liuxuechao發表於2024-11-20

命令模式

命令模式(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() 執行命令。

命令模式的關鍵思想是將請求封裝成一個物件,使得請求的傳送者和接收者解耦,從而可以靈活地處理請求、撤銷操作或者記錄日誌等。這種方式可以方便地新增新的命令,支援請求的排隊和延遲執行,並可以實現命令的撤銷和重做操作。