天天看點

[設計模式] 指令模式

[設計模式] 指令模式

指令模式實作

簡單指令

批量指令

簡單撤銷

宏指令

标準撤銷方式

總結

更多

手機使用者請<code>橫屏</code>擷取最佳閱讀體驗,<code>REFERENCES</code>中是本文參考的連結,如需要連結和更多資源,可以關注其他部落格釋出位址。

平台

位址

CSDN

https://blog.csdn.net/sinat_28690417

簡書

https://www.jianshu.com/u/3032cc862300

個人部落格

https://yiyuery.github.io/NoteBooks/

指令模式 将請求封裝成對象,這可以讓你使用不同的請求、隊列或者是日志請求來參數化其他對象。指令模式一般支援定義撤銷操作。
首先來讓我們實作一個能開燈的遙控指令場景。
[設計模式] 指令模式

定義一個開燈的指令接口實作:

定義一個遙控器:

<code>Ex.1</code>

如果是需要一組指令的執行呢?

<code>補充定義</code>一個指令<code>NoCommand</code>,用于預設指令的資訊列印。

<code>Ex.2</code>

定義兩組指令,每次在執行開啟操作前将對應的關閉操作寫入緩存變量,在執行撤銷方法時,執行即可。

<code>Ex.3</code>

定義一組指令的執行,類似于 MicroSoft 常用的宏定義函數一樣

假定我們定義一個宏指令實作回家後的一個智能操作:包含開燈和開電視,并要求它支援撤銷能力。

<code>Ex.4</code>

針對于指令場景的撤銷操作,其實我們可以直接定義一個<code>undo</code>操作接口在<code>Command</code>中,此處考慮到示範的代碼結構,我們在補充一個接口繼承<code>Command</code>來實作

對應的undo方式執行也調整下實作:

<code>Ex.5</code>

模式特點

将送出請求的對象和執行的對象解耦

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

調用者通過調用指令對象的<code>execute</code>送出請求,後者根據這個進行響應

調用者可以接受指令當做傳入的參數,甚至在運作時動态地進行

指令還支援撤銷操作的定義,做法是實作一個<code>undo</code>方法來回到<code>execute</code>被執行前的狀态

宏指令是指令的一種簡單延伸,允許調用多個指令

敲黑闆 !!!!

指令模式緻力于發送請求和執行請求的對象解耦操作!

掃碼關注<code>架構探險之道</code>,回複文章标題,擷取本文相關源碼和資源連結
[設計模式] 指令模式
知識星球(掃碼加入擷取曆史源碼和文章資源連結)
[設計模式] 指令模式

繼續閱讀