大戰設計模式 8 命令模式

2022-02-13 05:49:37 字數 875 閱讀 7231

設計模式使用的例子

將乙個請求封裝為乙個物件,從而可以用不同的請求對客戶進行引數化;對請求排隊或者記錄請求日誌,以及支援可撤銷的操作。

命令模式是一種物件行為型模式,其別名為動作(action)模式或事物(transaction)模式。

command(抽象命令類):乙個抽象類或介面,宣告了執行請求的execute()方法,通過這些方法可以呼叫請求接收者的相關操作。

concretecommand(具體命令類):具體命令類是抽象命令類的子類,實現了抽象命令類中宣告的方法。在實現execute()方法時,將呼叫接收者物件的相關操作(action)。

invoker(呼叫者):請求傳送者,通過命令物件來執行請求。

降低了系統的耦合度,請求傳送者與接受者不存在直接引用

方便地增加新的命令到系統中,無須修改源**,從而符合開閉原則

使用命令模式可能會導致某些系統有過多的具體命令類。

因為針對每乙個對請求接收者的呼叫操作都需要設計乙個具體命令,因此在某些系統中可能需要提供大量的具體命令類。

系統需要將請求呼叫者和請求接收者解耦

1、命令模式最簡單的理解就是,a通過命令讓b執行對應的事情。

其中:a不需要知道b是如何執行的,b不需要知道是誰讓他做這個事情,只要收到對應的命令就執行對應的事情

2、invoker在其中的作用就像是乙個服務員,就是幫你傳遞命令用的,你需要做的是告訴它你要執行什麼命令

invoker作為乙個服務員也是不需要知道具體是怎麼做的

3、擴充套件:

可以利用不同的命令組成巨集命令,也就是呼叫一次執行多個命令的組合

可以利用空命令來保證不需要判斷null,空命令就是什麼也不執行

命令模式常用來處理佇列請求和日誌請求

參考部落格:

設計模式8之(命令模式)

若有不恰之處,請各位道友指正 個人覺得,看懂類圖就是學習設計模式的精髓了。命令模式概念 根據類圖寫 結構 參加講座 public void attendlecture public class meetcommand implements command override public void e...

大戰設計模式 14 狀態模式

設計模式使用的例子 允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。context 環境類 定義客戶感興趣的介面。維護乙個concretestate子類的例項,這個例項定義當前狀態 讓狀態的變化有序,且保證在新增狀態或者行為的情況下不會出現有遺漏的情況 封裝寄語狀態的行為,並將行為...

大戰設計模式 14 狀態模式

設計模式使用的例子 允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。context 環境類 定義客戶感興趣的介面。維護乙個concretestate子類的例項,這個例項定義當前狀態 讓狀態的變化有序,且保證在新增狀態或者行為的情況下不會出現有遺漏的情況 封裝寄語狀態的行為,並將行為...