Design Pattern: Behavioral Patterns — Command Pattern (命令模式)

Charlie Lee
Bucketing
Published in
2 min readMay 2, 2020

讓物件的行為在更解偶一點,你可以參考Command Pattern

Photo by Shahadat Rahman on Unsplash

前言

Command Pattern與Chain of Responsibility是非常相似的。

Chain of Responsibility將邏輯拆開,透過物件之間的連接做呼叫,物件間的聯就透過建構者或Dependency Inject注入。

而兩者的差別在於粒度的不同,Commande Pattern比較偏向將一個物件原本的method拆解成一個個的Command,而Chain of Responsibility的Handler粒度更大一點,更像是一個個完整邏輯的物件。

類別圖

  • 設計Command介面
  • 實作Command介面並解複寫Execute方法
  • 透過Receiver組裝Command組織成自己的物件邏輯,提供給Client呼叫

範例

英雄遊戲中的,常用組合招式非常適合用Command Pattern實踐,邏輯如下

  • 使用者可以將不同招式組裝成快捷鍵施放
  • 範例: 施毒 -> 祝福(加攻擊力) -> 攻擊

實作過程

  • 設計SkillCommand
  • 設計不同的Skill實作SkillComand並複寫Method實踐自己的邏輯
  • 透過一個Reciver組裝每個Skill包裝成自己的邏輯
  • Client執行

原始碼

結論

  • Command Pattern如同Chain of Responsibilty可以將擁有複雜邏輯的物件與樹狀關係解偶
  • 可以重複使用不同的Command組裝成新的邏輯結構
  • Command可以透過Iterative方式執行

--

--