定義:基本含義是針對一組算法或者行爲特性,將他們抽象到具備共同接口函數的獨立抽象類後者接口中,從而使得他們能夠相互替換。這樣就使得某一個特定的接口行爲能夠在不影響客戶端的狀況下發生變化。 算法
類型:行爲類模式 編程
類圖: 函數
策略模式是對算法的封裝,把一系列的算法分別封裝到對應的類中,而且這些類實現相同的接口,相互之間能夠替換。調用算法的主體則是封裝到了封裝類Context中,抽象策略Strategy通常是一個接口,目的只是爲了定義規範,裏面通常不包含邏輯。其實,這只是通用實現,而在實際編程中,由於各個具體策略實現類之間不免存在一些相同的邏輯,爲了不重複的代碼,咱們經常使用抽象類來擔任Strategy的角色,在裏面封裝公共的代碼。 spa
策略模式的結構: 設計
策略模式的核心是對算法的包裝,最終目的是把使用算法的責任(環境)和算法實現進行解耦。因爲環境和算法的獨立,算法的增長,修改都不會影響到環境。 對象
客戶端環境(Context)必須知道全部的策略類、理解這些不一樣策略算法之間的區別,並自行決定使用哪個策略類來完成業務邏輯。 繼承
適用場景 接口
作面向對象設計的,對策略模式必定很熟悉,由於它實質上就是面向對象中的繼承和多態,至少在在如下兩種狀況下,你們能夠考慮使用策略模式, struts2
struts2應用策略模式的例子: 擴展
Dispatcher進行初始化第二步,主要是完成對配置元素的加載器的初始化工做。請看圖
這些配置加載器的具體實現核心,是一個針對不一樣數據格式的配置元素的讀取過程。因爲配置的形式是多種多樣的,這就致使了讀取配置的算法也各不相同。
在這裏,不管有多少中策略實現,只要他們的行爲特徵是同樣的,能夠從中獲取策略實現的結果並加以處理。
策略實現能夠任意進行了靈活的擴展,而對客戶端調用者而言則是透明的。
這部分的代碼請參考前面的文章。