標籤:java 設計模式 命令模式
介紹
命令模式:將一個請求封裝為一個對象,從而使我們可用不同的請求對客戶進行參數化;對請求排隊或者記錄請求日誌,以及支援可撤銷的操作。也稱之為:動作Action模式、事務transaction模式。
結構
Command抽象命令類
ConcreteCommand具體命令類
- 命令介面實現對象,是“虛”的實現;通常會持有接收者,並調用接收者的功能來完成命令要執行的操作。
Invoker調用者/要求者
- 請求的寄件者,它通過命令對象來執行請求。一個調用者並不需要在設計時確定其接受者,因此它只與抽象命令類之間存在關聯。在程式運行時,將調用命令對象的execute(),間接調用接收者的相關操作。
Receiver接受者
- 接受者執行與請求相關的操作,具體實現對請求的業務處理
- 未抽象前,實際執行操作內容的對象。
Client客戶類
- 在客戶類中需要建立調用者對象、具體命令對象,在建立具體命令對象時指定對應的接收者。寄件者和接收者之間沒有直接關係,都通過命令對象間接調用
public interface Command{public void execute();}class ConcreteCommand implements Command{private Receiver receiver;public ConcreteCommand(Receiver receiver) {super();this.receiver = receiver;}@Overridepublic void execute() {// TODO Auto-generated method stubreceiver.action();}}/** * 調用者、發起者 */public class Invoke {private Command command;public Invoke(Command command) {super();this.command = command;}/*業務方法,用於調用命令的方法*/public void call(){command.execute();}}public class Receiver {public void action(){System.out.println("action");}}public class Client {public static void main(String[] args) {// TODO Auto-generated method stubCommand command = new ConcreteCommand(new Receiver());Invoke Invoke = new Invoke(command);Invoke.call();}}
開發中常見的情境
- Struts2中,action的整個調用過程中就有命令模式。
- 資料庫事務機制的底層實現
- 命令的撤銷和恢複
JAVA設計模式(15):行為型-命令模式(Command)