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