14.策略模式
策略模式作為一種軟件設計模式,指對象有某個行為,但是在不同的場景中,該行為有不同的實現算法。
策略模式把這些算法,都抽取出來,組成一個一個的類,可以任意的替換,大大降低了代碼的耦合度。
實現原理:將相同行為抽成一個接口(行為接口),定義方法,將具體實現定義實現類(算法類),在調用算法的方法中,用行為接口作為參數,調用方法.在實參傳具體接口實現類(算法類),從而不同實現類,實現不同效果.
優點
- 算法多樣性,且具備自由切換功能;
- 有效避免多重條件判斷,增強了封裝性,簡化了操作,降低出錯概率;
- 擴展性良好,策略類遵頊里氏替換原則,可以很方便地進行策略擴展;
缺點
- 策略類數量增多,且所有策略類都必須對外暴露,以便客戶端能進行選擇;
使用場景 - 針對同一類型問題,有多種處理方式,每一種都能獨立解決問題;
- 算法需要自由切換的場景;
- 需要屏蔽算法規則的場景;
1、策略接口
public interface IStrategy {/***現在的運行狀態*/void sportStatus();
}
2、若干策略實現類
紅燈:
public class RedLight implements IStrategy {@Overridepublic void sportStatus() {System.out.println("紅燈停");}
}
黃燈:
public class YellowLight implements IStrategy {@Overridepublic void sportStatus() {System.out.println("黃燈等待");}
}
綠燈:
public class GreenLight implements IStrategy {@Overridepublic void sportStatus() {System.out.println("綠燈行");}
}
3、策略上下文對象
@AllArgsConstructor
@NoArgsConstructor
@Data
public class StrategyContext {private IStrategy iStrategy;public void contextMethod(){iStrategy.sportStatus();}}
4、測試類
public class StrategyTest {public static void main(String[] args) {IStrategy yellowLight = new YellowLight();StrategyContext strategyContext = new StrategyContext(yellowLight);strategyContext.contextMethod();}
}