重要程度:★★★★☆ 一、什麼是策略模式 對象的行為,在不同的環境下,有不同的實現; 比如人的上班行為,在不同的環境下,可以選擇走路上班或者開車上班,由客戶端根據情況決定採用何種策略; 二、補充說明 符合“開閉原則”,可以在不修改原有代碼的基礎上替換、添加新的策略; 不同的策略可以相互替換; 客戶端
重要程度:★★★★☆
一、什麼是策略模式
對象的行為,在不同的環境下,有不同的實現;
比如人的上班行為,在不同的環境下,可以選擇走路上班或者開車上班,由客戶端根據情況決定採用何種策略;
二、補充說明
符合“開閉原則”,可以在不修改原有代碼的基礎上替換、添加新的策略;
不同的策略可以相互替換;
客戶端自己決定在什麼情況下使用什麼具體策略角色;
與狀態模式區別:使用策略模式時,客戶端手動選擇策略,使用狀態模式時,其行為是根據狀態是自動切換的。
三、角色
抽象策略
具體策略
環境
四、例子,JAVA實現
例子描述:人上班,使用步行或者開車上班;
策略:步行上班、開車上班...
關係圖
抽象策略介面
package com.pichen.dp.behavioralpattern.strategy; public interface IStrategy { public void execute(); }
具體策略
package com.pichen.dp.behavioralpattern.strategy; public class DriveStrategy implements IStrategy{ /** * @see com.pichen.dp.behavioralpattern.strategy.IStrategy#execute() */ @Override public void execute() { System.out.println("driving。。。"); } }
package com.pichen.dp.behavioralpattern.strategy; public class WalkStrategy implements IStrategy{ /** * @see com.pichen.dp.behavioralpattern.strategy.IStrategy#execute() */ @Override public void execute() { System.out.println("walking。。。"); } }
環境
package com.pichen.dp.behavioralpattern.strategy; public class Context { IStrategy strategy; public Context(IStrategy strategy) { this.strategy = strategy; } public void execute() { this.strategy.execute(); } }
客戶端
package com.pichen.dp.behavioralpattern.strategy; public class Main { public static void main(String[] args) { Context context = null; context = new Context(new WalkStrategy()); context.execute(); context = new Context(new DriveStrategy()); context.execute(); } }
結果列印
walking。。。
driving。。。