HeadFirst筆記01:策略模式

策略模式是什麼?

策略(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("最後沙丁魚獲得了勝利");
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章