刨根問底-struts2應用策略模式(Strategy)分析

定義:基本含義是針對一組算法或者行爲特性,將他們抽象到具備共同接口函數的獨立抽象類後者接口中,從而使得他們能夠相互替換。這樣就使得某一個特定的接口行爲能夠在不影響客戶端的狀況下發生變化。 算法

類型:行爲類模式 編程

類圖: 函數


  策略模式是對算法的封裝,把一系列的算法分別封裝到對應的類中,而且這些類實現相同的接口,相互之間能夠替換調用算法的主體則是封裝到了封裝類Context中,抽象策略Strategy通常是一個接口,目的只是爲了定義規範,裏面通常不包含邏輯。其實,這只是通用實現,而在實際編程中,由於各個具體策略實現類之間不免存在一些相同的邏輯,爲了不重複的代碼,咱們經常使用抽象類來擔任Strategy的角色,在裏面封裝公共的代碼。 spa

策略模式的結構: 設計

  • 環境角色context:也叫上下文,對策略進行二次封裝,目的是避免高層模塊對策略的直接調用。將制有一個Strategy類的引用,將決定調用哪一種Strategy角色完成業務邏輯。
  • 抽象策略Strategy:一般狀況下爲一個接口,當各個實現類中存在着重複的邏輯時,則使用抽象類來封裝這部分公共的代碼。這個角色是策略模式的核心,他是全部策略算法的核心概括。
  • 具體策略(ConcreteStrategy):具體策略角色一般由一組封裝了算法的類來擔任,這些類之間能夠根據須要自由替換。

    策略模式的核心是對算法的包裝,最終目的是把使用算法的責任(環境)和算法實現進行解耦。因爲環境和算法的獨立,算法的增長,修改都不會影響到環境。 對象

    客戶端環境(Context)必須知道全部的策略類、理解這些不一樣策略算法之間的區別,並自行決定使用哪個策略類來完成業務邏輯。 繼承

適用場景 接口

        作面向對象設計的,對策略模式必定很熟悉,由於它實質上就是面向對象中的繼承和多態,至少在在如下兩種狀況下,你們能夠考慮使用策略模式, struts2

  • 幾個類的主要邏輯相同,只在部分邏輯的算法和行爲上稍有區別的狀況。
  • 有幾種類似的行爲,或者說算法,客戶端須要動態地決定使用哪種,那麼可使用策略模式,將這些算法封裝起來供客戶端調用。

struts2應用策略模式的例子: 擴展

Dispatcher進行初始化第二步,主要是完成對配置元素的加載器的初始化工做。請看圖

這些配置加載器的具體實現核心,是一個針對不一樣數據格式的配置元素的讀取過程。因爲配置的形式是多種多樣的,這就致使了讀取配置的算法也各不相同。

在這裏,不管有多少中策略實現,只要他們的行爲特徵是同樣的,能夠從中獲取策略實現的結果並加以處理。

策略實現能夠任意進行了靈活的擴展,而對客戶端調用者而言則是透明的。

這部分的代碼請參考前面的文章。

相關文章
相關標籤/搜索