在Java中,命令模式(Command Pattern)是一種行為設計模式,它允許你將一個請求封裝為一個對象,從而使你能夠使用不同的請求、隊列或日志請求參數化其他對象。此外,它還支持可撤銷的操作。
以下是如何在Java中實現命令模式的步驟:
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 LightOffCommand implements Command {
Light light;
public LightOffCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.off();
}
}
在這個例子中,我們有兩個具體命令:LightOnCommand
和 LightOffCommand
,它們分別實現了 Command
接口。這些類接收一個 Light
對象作為參數,并在 execute
方法中調用相應的 on()
或 off()
方法。
public class Light {
public void on() {
System.out.println("Light is ON");
}
public void off() {
System.out.println("Light is OFF");
}
}
在這個例子中,Light
類是接收者,它包含了 on()
和 off()
方法。
public class RemoteControl {
Command command;
public void setCommand(Command command) {
this.command = command;
}
public void pressButton() {
command.execute();
}
}
在這個例子中,RemoteControl
類是調用者,它包含一個 Command
接口類型的成員變量 command
。setCommand
方法用于設置要執行的命令,而 pressButton
方法則調用該命令的 execute
方法。
public class Main {
public static void main(String[] args) {
Light light = new Light();
Command lightOn = new LightOnCommand(light);
Command lightOff = new LightOffCommand(light);
RemoteControl remoteControl = new RemoteControl();
remoteControl.setCommand(lightOn);
remoteControl.pressButton(); // 輸出 "Light is ON"
remoteControl.setCommand(lightOff);
remoteControl.pressButton(); // 輸出 "Light is OFF"
}
}
在這個例子中,我們首先創建了一個 Light
對象和兩個具體命令(lightOn
和 lightOff
)。然后,我們創建了一個 RemoteControl
對象,并使用 setCommand
方法設置要執行的命令。最后,我們調用 pressButton
方法來執行命令。