響應式網站的優(yōu)勢關鍵詞推廣
軟件設計模式(Design pattern),又稱設計模式,是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性、程序的重用性。
匯總目錄鏈接:【玩轉23種Java設計模式】學習目錄匯總整理
文章目錄
- 一、簡介
- 二、實例
- 1、命令接口(Command)
- 2、燈(Light)
- 3、打開燈的命令(LightOnCommand)
- 4、關閉燈的命令(LightOffCommand)
- 5、遙控器(RemoteControl)
- 6、客戶端(CommandPatternExample)
- 三、總結
- 1、優(yōu)點
- 2、缺點
- 3、應用場景
一、簡介
??命令模式(Command Pattern)是一種行為型設計模式,它將請求封裝成對象,從而使得可以使用不同的請求、隊列或日志來參數化其他對象,同時支持可撤銷的操作。該模式的核心是將“請求”抽象為獨立的對象,這樣可以更靈活地設計系統(tǒng)的各個模塊。
主要角色:
- Command(命令接口):定義命令執(zhí)行的接口。
- ConcreteCommand(具體命令類):實現命令接口,綁定一個接收者并實現具體的動作。
- Invoker(調用者):持有命令對象并觸發(fā)執(zhí)行。
- Client(客戶端):創(chuàng)建命令對象并設置其接收者和調用者。
二、實例
例如:模擬智能家居中的燈光控制場景。
1、命令接口(Command)
interface Command {void execute();void undo();
}
2、燈(Light)
class Light {public void on() {System.out.println("The light is ON.");}public void off() {System.out.println("The light is OFF.");}
}
3、打開燈的命令(LightOnCommand)
class LightOnCommand implements Command {private Light light;public LightOnCommand(Light light) {this.light = light;}@Overridepublic void execute() {light.on();}@Overridepublic void undo() {light.off();}
}
4、關閉燈的命令(LightOffCommand)
class LightOffCommand implements Command {private Light light;public LightOffCommand(Light light) {this.light = light;}@Overridepublic void execute() {light.off();}@Overridepublic void undo() {light.on();}
}
5、遙控器(RemoteControl)
class RemoteControl {private Command command;public void setCommand(Command command) {this.command = command;}public void pressButton() {command.execute();}public void pressUndo() {command.undo();}
}
6、客戶端(CommandPatternExample)
public class CommandPatternExample {public static void main(String[] args) {Light livingRoomLight = new Light();Command lightOn = new LightOnCommand(livingRoomLight);Command lightOff = new LightOffCommand(livingRoomLight);RemoteControl remote = new RemoteControl();// 打開燈remote.setCommand(lightOn);remote.pressButton();// 撤銷操作remote.pressUndo();// 關閉燈remote.setCommand(lightOff);remote.pressButton();// 撤銷操作remote.pressUndo();}
}
三、總結
1、優(yōu)點
- 解耦請求與實現:命令模式將請求的發(fā)送者和接收者解耦,使得發(fā)送者無需知道接收者的具體實現。
- 支持撤銷與重做:通過在命令類中添加撤銷邏輯,可以輕松實現撤銷和重做功能。
- 靈活擴展:可以很方便地新增命令,而不需要修改現有代碼。
2、缺點
- 命令類較多:對于每一個具體操作都需要一個命令類,增加了類的數量和系統(tǒng)復雜性。
- 請求鏈復雜:如果命令鏈較長,可能會導致請求的跟蹤和管理變得困難。
3、應用場景
- 事務性操作:例如數據庫操作的撤銷和重做。
- 任務隊列系統(tǒng):將操作排隊執(zhí)行,例如打印隊列、任務調度。
- GUI開發(fā):按鈕的點擊事件可以通過命令模式封裝。
- 日志記錄:記錄每個命令的執(zhí)行,便于系統(tǒng)回滾或重做操作。