定義
將一個請求封裝爲一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支持可撤銷的操作。
①封裝請求:抽象出需要執行的動作,封裝成對象(有統一的接口)。
②參數化:可以用不同的命令對象,去參數化配置客戶的請求。(即,將命令對象作爲參數去供Invoker調用)。
角色
調用者(Invoker)
要求命令對象執行請求,通常會持有命令對象,可以持有很多的命令對象。這個是客戶端真正觸發命令並要求命令執行相應操作的地方,也就是說相當於使用命令對象的入口。
接收者(Receiver)
真正執行命令的對象。任何類都可能成爲一個接收者,只要它能夠實現命令要求實現的相應功能。
命令類(Command)
定義命令的接口,聲明執行的方法
具體命令類(ConcreteCommand)
是“虛”的實現,通常會持有接收者並調用接收者的功能來完成命令要執行的操作。
類圖
示例
要點
(1)需要抽象出執行的動作,並參數化這些對象時可選用命令模式
(2)需要不同的時刻指定、排列和執行請求,可將請求封裝成爲命令對象,然後實現將請求隊列化。
(3)需要支持取消操作,可通過管理命令對象,能很容易實現命令的恢復和重做功能。
(4)在需要事務的系統中,可選用命令模式,它提供了對事務進行建模的方法。