天天看點

指令模式

指令模式定義

将一個請求封裝為一個對象,進而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日志,以及支援可撤銷的操作。

作用

指令模式主要應用于将行為調用者與實作者解耦。講送出請求和執行對象分開來。

例如:比如我們以前慣用的寫代碼的方式是logicprocess logic = new logicprocess();  然後緊接着調用實作方法logic.process(),這種寫法其實非常普遍,但這種寫法把行為調用者和行為實作者耦合在了一起,一般情況下并沒有什麼問題的,但當調用邏輯比較複雜或則調用行為有多種實作時就非常不利于程式的擴充。

uml圖:

指令模式

指令模式的參與角色:

(1)抽象指令角色(command):抽象指令,包含指令執行的抽象方法

(2)指令接收者(receiver):指令接收者角色,它包含所有指令的具體行為實作方法。

(3)具體指令角色(concretecommand):它包含一個指令接收者對象,并調用接收者的對象相應實作方法。

(4)指令調用者角色(invoker):提供給用戶端調用,接收用戶端所傳遞的具體指令對象。

java代碼實作:

抽象指令角色:command.java

指令接收者角色:document.java

具體指令角色:addcommand.java

具體指令角色:undocommand.java

具體指令角色:redocommand.java

調用者角色:invoker.java

最後可以寫一個測試來就知道使用指令模式的好處了

總結

指令模式将送出請求的對象和執行請求的對象解耦

在被解耦的兩者之間是通過指令對象進行溝通的。指令對象封裝了接受者和一個或一組動作。

調用者通過指令對象的 execute() 送出請求,這會使得接受者的動作被調用。

指令模式可為多種行為提供統一的調用入口,便于程式對行為的管理和控制。

指令模式将行為的具體實作封裝起來,用戶端無需關心行為的具體實作。

指令可以支援撤銷,做法是實作一個 undo()方法來回到 execute()被執行前的狀态。