java常用設計模式5——策略模式
阿新 • • 發佈:2018-12-04
通常一個問題有多個解決方案的時候,我們會把每個解決方案封裝到自己的類裡面,這樣可以避免在同一個類裡通過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方法都解除安裝同一個類裡則會讓程式碼顯得臃腫,邏輯也更加複雜。
以上就是策略模式的簡單介紹啦(#^ . ^#)