23種設計模式(13)策略模式(Strategy模式)

把具體的算法實現從業務邏輯中剝離出來,成爲一系列獨立算法類,使得它們可以相互替換

1、創建接口
//攻取西川的策略

public interface IOccupationStrategyWestOfSiChuan {
     public void occupationWestOfSiChuan(String msg);
}

2、創建接口的三個實現

//攻取西川的上上計策
public class UpperStrategy implements IOccupationStrategyWestOfSiChuan {
    @Override
    public void occupationWestOfSiChuan(String msg) {
        if (msg == null || msg.length() < 5) {
            //故意設置障礙,導致上上計策失敗
            System.out.println("由於計劃泄露,上上計策失敗!");
            int i = 100/0;
        }
        System.out.println("挑選精兵,晝夜兼行直接偷襲成都,可以一舉而定,此爲上計計也!");
    }
}

//攻取西川的中計策
public class MiddleStrategy implements IOccupationStrategyWestOfSiChuan {
    @Override
    public void occupationWestOfSiChuan(String msg) {
        System.out.println("楊懷、高沛是蜀中名將,手下有精銳部隊,而且據守關頭,我們可以裝作要回荊州,引他們輕騎來見,可就此將其擒殺,而後進兵成都,此爲中計。");
    }
}

//攻取西川的下計策
public class LowerStrategy implements IOccupationStrategyWestOfSiChuan {
    @Override
    public void occupationWestOfSiChuan(String msg) {
        System.out.println("退還白帝,連引荊州,慢慢進圖益州,此爲下計。");
    }
}

3、上下文策略

//攻取西川參謀部,就是上下文啦,由上下文來選擇具體的策略
public class OccupationContext  {

    public void occupationWestOfSichuan(String msg){
        //先用上上計策
        IOccupationStrategyWestOfSiChuan strategy = new UpperStrategy();
        try {
            strategy.occupationWestOfSiChuan(msg);
        } catch (Exception e) {
            //上上計策有問題行不通之後,用中計策
            strategy = new MiddleStrategy();
            strategy.occupationWestOfSiChuan(msg);
        }
    }
}

4、客戶端測試類

//此時外部客戶端相當於劉備了,不管具體採用什麼計策,只要結果(成功的攻下西川)
public class Client {

    public static void main(String[] args) {
        OccupationContext context = new  OccupationContext();
        //這個給手下的人激勵不夠啊
        context.occupationWestOfSichuan("拿下西川");
        System.out.println("=========================");
        //這個人人有賞,讓士兵有動力啊
        context.occupationWestOfSichuan("拿下西川之後,人人有賞!");
    }
}

控制檯輸出:

由於計劃泄露,上上計策失敗!
楊懷、高沛是蜀中名將,手下有精銳部隊,而且據守關頭,我們可以裝作要回荊州,引他們輕騎來見,可就此將其擒殺,而後進兵成都,此爲中計。
------------------------------------------------
挑選精兵,晝夜兼行直接偷襲成都,可以一舉而定,此爲上計計也!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章