第184章

大B:“在定義中提到,命令模式支持可撤銷的操作。”

小A:“但是在上面的舉例中並沒有體現出來啊!”

大B:“其實命令模式之所以能夠支持這種操作,完全得益於在請求者與接收者之間添加了中間角色。爲了實現undo功能,首先需要一個歷史列表來保存已經執行過的具體命令角色對象;修改具體命令角色中的執行方法,使它記錄更多的執行細節,並將自己放入歷史列表中;並在具體命令角色中添加undo方法,此方法根據記錄的執行細節來複原狀態,很明顯,首先程序員要清楚怎麼來實現,因爲它和execute的效果是一樣的。同樣,redo功能也能夠照此實現。命令模式還有一個常見的用法就是執行事務操作。這就是爲什麼命令模式還叫做事務模式的原因吧。它可以在請求被傳遞到接收者角色之前,檢驗請求的正確性,甚至可以檢查和數據庫中數據的一致性,而且可以結合組合模式的結構,來一次執行多個命令。使用命令模式不僅僅可以解除請求者和接收者之間的耦合,而且可以用來做批處理操作,這完全可以發揮你自己的想象——請求者發出的請求到達命令角色這裡以後,先保存在一個列表中而不執行;等到一定的業務需要時,命令模式再將列表中全部的操作逐一執行。”

小A:“哦,命令模式實在太靈活了。真是一個很有用的東西啊!”