設計模式 - 策略模式 (Behavioral Patterns - Strategy Design Pattern)
前言
策略模式,主要是讓相似的行為一起時做一個介面,並且可以抽換他們。在沒使用策略模式前,我們可能會用大量的if/else or swithc去撰寫我們的邏輯,而透過策略模式可以將每個邏輯包裝好,並且透過介面方法執行。
類別圖
- 將我們要執行的演算法繼承一個策略的介面
- 客戶端統一呼叫此策略介面的方法
這代表著我隨時可以抽換不同的演算法
範例
英雄遊戲的技能施放,技能施放不管是怎樣的效果,他都是一個技能,非常適合用策略模式來撰寫。
- 我們火焰攻擊和治癒都是實作Skill介面
- 在SkillService中,再透過Map和String的比對拿出Skill實做並且使用
import java.util.HashMap;
import java.util.Map;
interface Skill {
void doAction();
}
class FireSkill implements Skill {
@Override
public void doAction() {
System.out.println("Use fire to attack");
}
}
class HealSkill implements Skill {
@Override
public void doAction() {
System.out.println("Heal myself");
}
}
class SkillService {
private Map<String, Skill> skillMap = new HashMap<>();
public SkillService() {
skillMap.put("FireAttack", new FireSkill());
skillMap.put("Heal", new HealSkill());
}
public void doAction(String skillType) {
Skill skill = skillMap.get(skillType);
skill.doAction();
}
}
public class Strategy {
public static void main(String[] args) {
SkillService skillService = new SkillService();
skillService.doAction("FireAttack");
skillService.doAction("Heal");
}
}
結論
策略模式算是目前階段我個人最常用的Design Pattern,我個人對他的感覺
- 可以替代if/else (switch),讓我的單元測試更好撰寫
- 擴充方便 (需要增加演算法只要繼承繼續往下寫)
留言
張貼留言