Design Pattern - Command Pattern

概述

Command Pattern,即命令模式。

命令模式是一種行爲型設計模式。將請求轉換爲一個包含與請求相關的所有信息的獨立對象。該轉換讓你根據不同的請求將方法參數化、延遲請求執行或將其放入隊列中,並且能實現可撤銷操作。

每一個命令都是一個操作。請求的一方要求執行一個操作。接收的一方接收該請求執行操作。解耦了請求方和接收方。請求方只需請求執行命令,不用關心命令如何被接收、如何被執行,是否被執行等。

本質是對命令的請求與處理解耦
在這裏插入圖片描述

結構

在這裏插入圖片描述

其實,命令模式的結構核心就是Command接口,在它的具體實現類,加入Receiver(也就是實際執行命令的對象)。Command接口的加入,使得Invoker和Receiver不用直接交互,而是藉助Command接口間接交互,從而解耦Invoker和Receiver。

適合的應用場景

  • 現實語義中帶有“命令”的操作(比如shell命令,命令菜單等)。

  • 需要抽象出等待執行的行爲(比如撤銷、恢復),java中的Runnable接口即是如此。

  • 同其他對象一樣, 命令也可以實現序列化 (序列化的意思是轉化爲字符串), 從而能方便地寫入文件或數據庫中。 一段時間後, 該字符串可被恢復成爲最初的命令對象。 因此, 你可以延遲或計劃命令的執行。 但其功能遠不止如此! 使用同樣的方式, 你還可以將命令放入隊列記錄命令或者通過網絡發送命令

  • 請求調用者與處理者解耦,使得兩者不直接交互。

  • 需要支持命令宏(即組合命令操作)。

優缺點

在這裏插入圖片描述

代碼演示

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

代碼寫法不是固定不變的,關鍵的是如何將請求抽象出ICommand接口,ICommand接口如何與命令的請求方綁定,在ICommand的具體實現類如何完成與命令的處理者綁定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章