1. 程式人生 > >java常用設計模式5——策略模式

java常用設計模式5——策略模式

通常一個問題有多個解決方案的時候,我們會把每個解決方案封裝到自己的類裡面,這樣可以避免在同一個類裡通過if,else或者switch來判斷使用哪種方案。
比如:

if(type == 1){
	return fun1();
}else if(type == 2){
	return fun2();
}else{
	return fun();
}

fun(){...};
fun1(){...};
fun2(){...};

如果我們要增加一個判斷型別就要再增加一個else if(),並且增加一個fun方法,這樣就會導致同一個類裡程式碼越來越混亂。

使用策略模式怎麼做呢?

程式碼示例:

1、首先定義一個策略介面,這個介面負責宣告所有策略都必須具備的方法
/**
 * 策略介面
 */
public interface CalculateStrategy {
    String calculatePrice();
}
2、繼承介面實現具體的策略
/**
 * 公交車收費策略
 */
public class BusStrategy implements CalculateStrategy {
    @Override
    public String calculatePrice() {
        return "公交車收費策略";
    }
}
/**
 * 地鐵策略
 */
public class SubwayStrategy implements CalculateStrategy { @Override public String calculatePrice() { return "地鐵策略"; } }
3、使用策略
    CalculateStrategy calculateStrategy;

    public void setCalculateStrategy(CalculateStrategy calculateStrategy){
        this.calculateStrategy =
calculateStrategy; } //使用的時候先設定策略再使用就可以啦 setCalculateStrategy(new BusStrategy()); String str = calculateStrategy.calculatePrice(); Log.i("test", "策略模式 :" + str);
4、如果要新增策略只需要新增實現了策略介面的類就行了
/**
 * 新增的策略
 */
public class NewAddStrategy implements CalculateStrategy {
    @Override
    public String calculatePrice() {
        return "新新增的策略";
    }
}

看起來不過是封裝了一下fun方法而已,那麼策略模式到底好在哪裡呢?
其實就是增強程式碼的穩定性和可讀性以及可擴充套件性,對於越複雜的業務效果就越直觀。如果fun方法都解除安裝同一個類裡則會讓程式碼顯得臃腫,邏輯也更加複雜。

以上就是策略模式的簡單介紹啦(#^ . ^#)