android中,java中的策略模式Strategy模式

策略模式

概念:

策略模式就是定義不同的算法,或者說不同的情況並且將不同的行爲方式封裝起來,根據不同的情況來使用不同的算法或者行爲,當然,前提是結果都是一致的。

官方的說法是:

策略模式定義了一系列的算法,並將每一個算法封裝起來,而且使它們還可以相互替換。策略模式讓算法獨立於使用它的客戶而獨立變換。


我們先從例子說起吧,其實很簡單:我們平時在做算法的時候會想到很多情況,比如說數值,返回值不同,使用不同的算法,用一個if else判斷,或者swich判斷,進行不同的算法,這裏,從一個生活的實例說起吧:


我們出門旅遊。有三種不同的算法(方式),步行,飛機,火車

//旅遊策略類

public class TravelStrategy {
//枚舉中定義了三種不同的算法常量

    enum Strategy{
//步行,飛機,火車
        WALK,PLANE,SUBWAY
    }
    private Strategy strategy;
    public TravelStrategy(Strategy strategy){
        this.strategy=strategy;
    }
 //旅遊方法
    public void travel(){
//判斷方式分別進行操作
        if(strategy==Strategy.WALK){
            print(walk);
        }else if(strategy==Strategy.PLANE){
            print(plane);
        }else if(strategy==Strategy.SUBWAY){
            print(subway);
        }
    }
 
    public void print(String str){
        System.out.println(出行旅遊的方式爲:+str);
    }
 
    public static void main(String[] args) {
//調用方法
        TravelStrategy walk=new TravelStrategy(Strategy.WALK);
        walk.travel();
 
        TravelStrategy plane=new TravelStrategy(Strategy.PLANE);
        plane.travel();
 
        TravelStrategy subway=new TravelStrategy(Strategy.SUBWAY);
        subway.travel();
    }
}


這些都是正常思維方式下我們平時使用的方式。但是這樣做有一個致命的缺點,一旦出行的方式要增加,我們就不得不增加新的else if語句,而這違反了面向對象的原則之一,對修改封閉。而這時候,策略模式則可以完美的解決這一切。

那麼用策略模式如何去做呢??

步驟:(分四步):
1,創建旅遊接口,定義旅遊方法
2,創建不同的實現類,實現接口,
3,創建策略包裝類,實現包裝
4,方法的調用

接口
public interface Strategy {
    void travel();
}





實現類:1,2,3
public class WalkStrategy implements Strategy{ 
    @Override
    public void travel() {
        System.out.println(walk);
    }
 
}




public class PlaneStrategy implements Strategy{ 
    @Override
    public void travel() {
        System.out.println(plane);
    }
 
}




public class SubwayStrategy implements Strategy{ 
    @Override
    public void travel() {
        System.out.println(subway);
    }
 
}



包裝類
public class TravelContext {    Strategy strategy;
 
    public Strategy getStrategy() {
        return strategy;
    }
 
    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }
 
    public void travel() {
        if (strategy != null) {
            strategy.travel();
        }
    }
}




調用:




public class Main {    public static void main(String[] args) {
        TravelContext travelContext=new TravelContext();
        travelContext.setStrategy(new PlaneStrategy());
        travelContext.travel();
        travelContext.setStrategy(new WalkStrategy());
        travelContext.travel();
        travelContext.setStrategy(new SubwayStrategy());
        travelContext.travel();
    }
}


這樣,如果以後只要增加了旅遊的方式,只需要增加實現類就可以了,符合面向對象的思想








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