指令模式是一個高内聚的模式。
定義如下:将一個請求封裝成一個對象,進而讓你使用不同的請求把用戶端參數化,對請求排隊或者記錄請求日志,可以提供指令的撤銷和恢複功能。
通用類圖如下:
角色說明:
● receive接收者角色
該角色就是幹活的角色,指令傳遞到這裡是應該被執行的。
● command指令角色
需要執行的所有指令都在這裡聲明。
● invoker調用者角色
接收到指令,并執行指令。在例子中,我(項目經理)就是這個角色。
通用源代碼如下:
指令模式的優點:
● 類間解耦
調用者角色與接收者角色之間沒有任何依賴關系,調用者實作功能時隻需調用command抽象類的execute方法就可以,不需要了解到底是哪個接收者執行。
● 可擴充性
command的子類可以非常容易地擴充,而調用者invoker和高層次的子產品client不産生嚴重的代碼耦合。
● 指令模式結合其他模式會更優秀
指令模式可以結合責任鍊模式,實作指令族解析任務;結合模闆方法模式,則可以減少
command子類的膨脹問題。
缺點:command的子類會産生膨脹的問題。