一、基本介紹
政策模式:定義了一系列算法,并将每個算法封裝起來,讓它們之間可以互相替換,讓算法的變化獨立于使用算法的客戶。
二、包含角色
1.抽象政策類:定義了一個公共接口,各種不同的算法以不同的方式實作這個接口,環境角色使用這個接口調用不同的算法。
2.具體政策類:實作了抽象政策定義的接口,提供具體的算法實作。
3.環境類:持有一個政策類的引用,讓給用戶端調用。
三、案例及UML類圖
案例說明:
旅遊方式有很多種,如窮遊、跟團遊,自駕遊,每一種旅遊方式的具體實作都不一樣。
UML類圖:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL0cGVOBTRU90MNpHW3BjMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLycjMzETMwAjMyETMwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
類TravelWay:
public interface TravelWay {
/**
* 旅遊
*/
void travel();
}
說明:旅遊接口類,抽象政策類,定義公共接口。
類GroupTour:
public class GroupTour implements TravelWay {
@Override
public void travel() {
System.out.println("跟團一起旅遊!");
}
}
說明:跟團遊類,具體政策類,實作跟團遊的具體操作。
類PoorTravel:
public class PoorTravel implements TravelWay {
@Override
public void travel() {
System.out.println("沒錢隻能窮遊!");
}
}
說明:窮遊類,具體政策類,實作窮遊的具體操作。
類TravelContext:
public class TravelContext {
private TravelWay travelWay;
public TravelContext(TravelWay travelWay) {
this.travelWay = travelWay;
}
public void travel() {
travelWay.travel();
}
}
說明:旅遊環境類,環境類,持有政策接口的引用,可根據不同的政策執行不同的旅遊操作。
類StrategyTest:
public class StrategyTest {
public static void main(String[] args) {
//跟團遊
TravelWay travelWay = new GroupTour();
TravelContext travelContext = new TravelContext(travelWay);
travelContext.travel();
//窮遊
travelWay = new PoorTravel();
travelContext = new TravelContext(travelWay);
travelContext.travel();
}
}
說明:測試及用戶端類。
四、适用場景
1.一個類定義了多種行為,并且這些行為在這個類的操作中以多個條件語句的形式出現,可将每個條件分支移入它們各自的政策類中以代替這些條件語句。(優化多重if else)
2.封裝同一類型操作的不同算法,對使用算法的客戶隐藏具體算法的實作細節。
3.針對同一類型問題的多種操作,僅僅是操作行為不同,并且将來可能會增加新的操作。