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