命令模式(command pattern)
將請求封裝成物件,以便使用不同的請求、佇列或者日誌 來引數化其他物件。命令模式也支援可撤銷的操作。命令模式的目的就是讓發出請求的物件和執行請求的物件解耦。
還是先看一下背景:看上面的圖,客戶想要執行某個接收者的操作,比如說顧客想要廚師給自己做乙個漢堡,這個命令也隱含著廚師做漢堡的操作,他就告訴呼叫者也就是服務員我點乙份漢堡,服務員收到這個點餐命令並放到櫃檯說訂單來了準備做飯就行了,不必擔心是哪個廚師做飯、做什麼飯、怎麼做飯,這就實現了呼叫者(服務員)和接收者(廚師)之間的解耦。
客戶負責建立乙個具體命令,並為這個命令設定它的接收者;呼叫者的setcommand()方法後會持有這個具體命令物件,並可適時地執行該命令物件的execute()方法;具體命令物件通常持有接收者的引用,execute()方法會呼叫接收者的乙個或多個動作,以滿足請求。
命令模式還有撤銷的功能,在undo()方法中倒轉execute的操作就行了,如果想多次撤銷,就要維護乙個命令棧了。當然,命令模式還有佇列請求、日誌請求等功能,這裡就不詳細說了。
設計模式筆記之五 命令模式
命令模式的定義 將請求封裝成物件,以便使用不同的請求 佇列或者日誌來引數化其他物件。命令模式也支援可撤銷的操作。uml圖 暫略 例子 命令介面類 public inte ce icommand 具體的命令實現類1 public class concretecommand1 implements ic...
設計模式筆記(五) 外觀模式
定義 又叫門面模式,提供了乙個統一的介面,用來訪問子系統中的一群介面 外觀模式定義了乙個高層介面,讓子系統更容易使用 型別 結構型 適用場景 子系統越來越複雜,增加外觀模式提供簡單呼叫介面 構建多層系統結構,利用外觀物件作為每層的入口,簡化層間呼叫 優點 簡化了呼叫過程,無需了解深入子系統,防止帶來...
設計模式學習筆記 命令模式
定義 將乙個請求封裝成物件,從而讓你使用不同的請求把客戶端引數化,對請求排隊或者記錄請求的日誌,可以提供命令的撤銷和恢復功能。通用類圖如下 通用 如下 命令接受者 public abstract class receiver public class concretereceiver1 extend...