回到目錄
概述
命令模式(Command Pattern)是一種行為型設計模式,它將請求封裝成一個物件,從而允許我們根據不同的請求將客戶端引數化,并且能夠將請求排隊或記錄請求日志、支持撤銷操作等,該模式使得請求的發送者和接收者解耦,
使用命令模式的主要目的是將方法呼叫封裝成物件,這樣可以在不同的背景關系中使用不同的請求、佇列或日志來引數化其他物件,這使得請求的發送者和接收者之間的耦合度降低,并且能夠靈活地擴展和變化請求的處理,
包含的物件
命令模式的主要參與者包括:
- Command(命令):宣告執行操作的介面,通常包含執行方法
execute()
, - ConcreteCommand(具體命令):實作
Command
介面,將一個接收者物件系結于一個動作,并實作執行方法, - Receiver(接收者):執行命令的相關操作,是具體業務邏輯的實際執行者,
- Invoker(呼叫者):發出具體命令并要求命令執行請求的物件,
- Client(客戶端):創建具體命令物件并設定其接收者,
在代碼中的體現
以下是一個使用命令模式的簡單示例,以控制電燈的開關操作為例:
- 定義命令介面和具體命令類:
// 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
類作為呼叫者負責接收命令并執行,客戶端代碼創建接收者物件、具體命令物件和呼叫者物件,并將它們組合在一起進行命令的執行,
通過命令模式,我們可以將控制電燈開關的操作封裝成一個命令物件,使得命令的發送者和接收者解耦,且能夠動態地設定命令并執行,這樣的設計可以方便地擴展和修改命令的處理邏輯,以及支持命令的撤銷和重做操作等,
回到目錄
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/556186.html
標籤:Java
上一篇:一文了解Go語言的I/O介面設計
下一篇:返回列表