您好,登錄后才能下訂單哦!
命令模式定義:將“請求”封裝成對象,以便使用不同的請求、隊列或者日志來參數化其他對象。命令模式也支持可撤銷的操作。
命令模式,封裝方法調用,命令模式可將“動作的請求者”從“動作的執行者”對象中解耦。類圖,如下:
生活中例子:餐廳點菜(顧客,服務員,廚師關系,顧客訂單告訴服務員就是,不用直接廚師打交道,廚師收到服務員的發來的訂單后開始做好大餐)。
命令模式的優點:
● 在命令模式中, 請求者不直接與接收者交互, 即請求者不包含接收者的引用, 因此徹底消除了彼此之間的耦合.
● 命令模式滿足"開-閉"原則. 如果增加新的具體命令和該命令的接收者, 不必修改調用者的代碼, 調用者就可以使用新的命令對象; 反之, 如果增加新的調用者, 不必修改現有的具體命令和接收者, 新增加的調用者就可以使用自己已有的具體命令
● 由于請求者被封裝到了具體命令中, 那么就可以將具體命令保存到持久化的媒介中, 在需要的時候, 重新執行這個具體命令. 因此使用命令模式可以記錄日志.
● 使用命令模式可以對請求者的"請求"進行排隊. 每個請求都各自對應一個具體命令,因此可以按照一定的順序執行這些命令.
命令模式的使用場景:
● 命令模式將發出請求的對象和執行請求的對象進行解耦
● 用于隊列請求,命令對象和一般對象一樣可以被傳來傳去,只要實現統一的接口方法,可以被任意調用
● 用于日志請求,將所有動作記錄在日志中,以便系統死機后能夠重新調用來恢復
案例1:實現一個家庭自動化遙控器,能遙控燈,空調,,,等設備的開/關。(硬件api類是廠家提供),類圖如下:
更多需求思考?
● 如果需要撤銷命令,怎么修改呢?
● 如果需要組合命令,比如(先打開燈,然后打開電視,然后打開熱水器,打開影響),這么實現呢?
● 如命令需要跨jvm,跨機器執行,怎么實現呢?
● 如果需要宕機后恢復數據,怎么實現呢?
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。