天天看點

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方法都解除安裝同一個類裡則會讓代碼顯得臃腫,邏輯也更加複雜。

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

繼續閱讀