策略模式是什麼?
策略(Strategy)模式的定義:該模式定義了一系列算法,並將每個算法封裝起來,使它們可以相互替換,且算法的變化不會影響使用算法的客戶。
策略模式我個人認爲就像打仗,諸葛亮軍師在旁邊。
諸葛亮有很多種錦囊妙計提供,暫時分爲3類:天時、地形、人民三方面。
而由於是緊急措施,只能採用一個方法,作爲我的最終方案。
諸葛亮就相當於一個接口,他可以根據你想要的方法,設置給你的錦囊中的具體策略類。然後最終的目的還是爲了打仗勝利。
把這些結合起來就是策略模式了。
策略模式簡單來說就是:你身邊有個謀士已爲你想出各種方法來達成想要的某個目的,你只要從謀士身上選擇一個合適的計謀然後去執行就可以了。
設計錦囊類和接口
public interface Strategyzhugeliang {
//這裏是諸葛亮提供錦囊方法
public abstract void strategy();
}
public class StrategyTian implements Strategyzhugeliang {
@Override
public void strategy() {
System.out.println("天計謀:炭烤沙丁魚祭天,引來雷劫(滑稽)");
}
}
public class StrategyDi implements Strategyzhugeliang {
@Override
public void strategy() {
System.out.println("地計謀:指揮沙丁魚挖陷阱,");
}
}
public class StrategyRen implements Strategyzhugeliang {
@Override
public void strategy() {
System.out.println("人計謀:沙丁魚羣直接總攻");
}
}
實施錦囊
//拿到了錦囊,要有個執行的人,這個就是執行者
public class StrategyUser{
//usestrategy指錦囊計謀
private Strategyzhugeliang usestrategy;
//匹配對應的錦囊
public StrategyUser(Strategyzhugeliang choosestrategy){
this.usestrategy=choosestrategy;
}
//使用裏面的計謀
public void Use(){
usestrategy.strategy();
}
}
//具體的真正實施
public class StrategyTest {
public static void main(String[] args) {
//執行者
StrategyUser user;
//執行計謀
System.out.print("第一種執行:");
user=new StrategyUser(new StrategyTian());
user.Use();
System.out.print("第二種執行:");
user=new StrategyUser(new StrategyDi());
user.Use();
System.out.print("第三種執行:");
user=new StrategyUser(new StrategyRen());
user.Use();
System.out.print("最後沙丁魚獲得了勝利");
}
}