命令模式-Command
源碼地址:https://github.com/mumushuiding/golang-design-pattern/tree/master/08_Command
❓ 問題
命令模式可以把一個命令的 形成 和 執行 在時間上去耦。也就是命令生成和執行可以在不同的時間發生。
✔️ 解決方法
一個 具體 命令(execute()/執行)和指向 接收 對象(LightSource)的引用被 封裝 在一個 基於 接口(ICommand)的對象(LightOffCommand)中,這個對象被交給調用者(LightSwitch)。調用者從客戶得到命令,然後 初始化 用於執行命令的方法。
⚡️類圖
?參與者
- ICommand(命令接口)。定義了命令操作
- LightOffCommand(具體命令)。實現了命令接口ICommand,封裝 了一個命令, 存儲 了執行這個命令所需的信息。
- LightSwitch (調用者)。? 存儲 了指向一個命令的引用,引用的類型是ICommand。
- ?LightSource (接收者)。 識別 所有執行命令相關操作的類。
?評價
?優點
- ?生成和執行在時間上 解耦
- ?具體命令可以動態 更換
- ♻️命令對象可以 複用
?缺點
- 這個模式用於分佈式系統時相當複雜
- 調用命令時會生成額外開銷