策略模式
策略模式是一種對象行爲型模式,策略模式將算法封裝在對象中,這樣可以方便地指定和改變一個對象所使用的算法。
定義
定義一系列的算法,把它們一個個封裝起來,並且使它們可相互替換。本模式使得算法可獨立於使用它的客戶而變化。
使用場景
- 許多相關的類僅僅是行爲有異。“策略”提供了一種用多個行爲中的一個行爲來配置一個類的方法。
- 需要使用一個算法的不同實體。例如,你可能會定義一些反映不同的空間/時間權衡的算法。當這些變體實現爲一個算法的類層次時,可以使用策略模式。
- 算法使用客戶不應該知道的數據。可使用策略模式以避免暴露覆雜的,與算法相關的數據結構。
- 一個類定義了多種行爲,並且這些行爲在這個類的操作中以多個條件語句的形式出現,將相關的條件分支移入它們各自的Strategy類中以代替這些條件語句。
結構
實現
public interface Strategy {
void algorithmOperate();
}
public class ConcreteStrategyA implements Strategy {
public void algorithmOperate() {
System.out.println("ConcreteStrategyA's algorithmOperate");
}
}
public class ConcreteStrategyB implements Strategy {
public void algorithmOperate() {
System.out.println("ConcreteStrategyB's algorithmOperate");
}
}
public class Context {
private Strategy strategy;
public Context(Strategy strategy){
this.strategy = strategy;
}
public void contextOperate(){
strategy.algorithmOperate();
}
}
測試
public class Client {
public static void main(String[] args) {
Strategy startegy = new ConcreteStrategyA();
Context con = new Context(startegy);
con.contextOperate();
}
}
測試結果:ConcreteStrategyA’s algorithmOperate
策略模式的決定權在用戶,系統本身提供不同算法的實現,新增或者刪除算法,對各種算法做封裝。因此,策略模式多用在算法決策系統中,外部用戶只需要決定用哪個算法即可