說說設計模式~命令模式(command)
概述
命令模式(Command Pattern)是一種(zhong)行為型設(she)計模式,它將請(qing)(qing)求(qiu)封裝(zhuang)成一個對象,從(cong)而允許我們根據不同的(de)(de)請(qing)(qing)求(qiu)將客戶端參數化,并且能夠將請(qing)(qing)求(qiu)排隊(dui)或(huo)記錄請(qing)(qing)求(qiu)日志、支持撤銷操作等(deng)。該模式使(shi)得請(qing)(qing)求(qiu)的(de)(de)發送(song)者和(he)接收(shou)者解耦。
使(shi)用(yong)命(ming)令模式(shi)的(de)主要(yao)目的(de)是將方法調用(yong)封裝成對象,這樣可以(yi)在不同的(de)上(shang)下文(wen)中使(shi)用(yong)不同的(de)請(qing)(qing)求(qiu)、隊(dui)列或日志來參數化(hua)其他對象。這使(shi)得(de)請(qing)(qing)求(qiu)的(de)發送者和接收者之間的(de)耦合度降低,并且(qie)能夠靈(ling)活地(di)擴展和變化(hua)請(qing)(qing)求(qiu)的(de)處理。
包含的對象
命令模式(shi)的主要參(can)與者(zhe)包(bao)括:
- Command(命令):聲明執行操作的接口,通常包含執行方法
execute()。 - ConcreteCommand(具體命令):實現
Command接口,將一個接收者對象綁定于一個動作,并實現執行方法。 - Receiver(接收者):執行命令的相關操作,是具體業務邏輯的實際執行者。
- Invoker(調用者):發出具體命令并要求命令執行請求的對象。
- Client(客戶端):創建具體命令對象并設置其接收者。
在代碼中的體現
以(yi)下是一個使用命令(ling)模式(shi)的(de)簡單示例,以(yi)控制電燈(deng)的(de)開關(guan)操作(zuo)為例:
- 定義命令接口和具體命令類:
// Command(命令)
public interface Command {
void execute();
}
// ConcreteCommand(具體命令)
public class LightOnCommand implements Command {
private Light light;
public LightOnCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.turnOn();
}
}
- 定義接收者類:
// Receiver(接收者)
public class Light {
public void turnOn() {
System.out.println("Light turned on");
}
public void turnOff() {
System.out.println("Light turned off");
}
}
- 定義調用者類:
// Invoker(調用者)
public class RemoteControl {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void pressButton() {
command.execute();
}
}
- 客戶端代碼示例:
// Client(客戶端)
public class Main {
public static void main(String[] args) {
// 創建接收者對象
Light light = new Light();
// 創建具體命令對象并設置接收者
Command lightOnCommand = new LightOnCommand(light);
// 創建調用者對象并設置命令
RemoteControl remoteControl = new RemoteControl();
remoteControl.setCommand(lightOnCommand);
// 執行命令
remoteControl.pressButton();
}
}
在上述示例中,命令模式的主要參與者包括 Command 接口和 LightOnCommand 具體命令類。Light
類作為接收者執行實際的命令操作。RemoteControl 類作(zuo)為調(diao)用(yong)者負責接(jie)收命(ming)令并執行(xing)。客(ke)戶(hu)端代碼(ma)創建接(jie)收者對象(xiang)(xiang)、具體命(ming)令對象(xiang)(xiang)和調(diao)用(yong)者對象(xiang)(xiang),并將它們組合在一起進行(xing)命(ming)令的執行(xing)。
通過命令模式,我們可以將控制電燈開關的操作封裝成一個命令對象,使得命令的發送者和接收者解耦,且能夠動態地設置命令并執行。這樣的設計可以方便地擴展和修改命令的處理邏輯,以及支持命令的撤銷和重做操作等。
回到目錄