Java設計模式 策略模式

2021-08-19 20:22:24 字數 1808 閱讀 5476

一,策略模式

策略模式定義了一套演算法族, 對每一種演算法進行封裝, 並提供乙個頂層的介面或者抽象類滿足演算法間的互換

二,uml類圖

1,strategy : 策略模式演算法族的頂層介面,定義了行為方法;

2,concretestrategy : 具體策略演算法,實現strategy介面,重寫策略方法,確定某一具體行為

3,context : 環境類,使用演算法的角色,在解決問題時可能採用不同的策略,持有strategy的引用並進行演算法應用

三,**分析 --- 以快遞為例

1,快遞介面

public inte***ce express
介面中提供了乙個發快遞的方法

2,快遞具體實現

public class dfexpress implements express 

}public class jdexpress implements express

}public class sfexpress implements express

}public class ydexpress implements express

}

統一實現了快遞(express)介面,並重寫了send()方法,分別定義不同的傳送方式

3,環境類

public class sendpackage 

}

客戶端傳遞制定的演算法編碼到環境類中, 環境類傳遞該狀態並通過簡單工廠模式例項化物件

4,工廠類

public class expressfactory  else if (expressenum.jd_express.getstrvalue().equals(status))  else if (expressenum.df_express.getstrvalue().equals(status)) 

return new ydexpress();}}

工廠類中,接收環境類傳遞的狀態,並使用列舉進行比對並建立物件

5,列舉類

public enum expressenum 

public integer getvalue()

public string getstrvalue()

}

6,測試類

public class expresstest 

}

7,測試結果

最終執行結果

8,設計考慮

* 引用工廠類 : 正式開發環境中,前後臺互動類似於這樣的場景傳遞基本會以code形式為主,後台需要對該code進行解析,這就需要新增分支判斷;

* 引用列舉類 : 對code應該提供乙個標準的類進行約束,不能依靠習慣預設,專案成長起來後,基礎的東西往往會造成意想不到的後果;

四,利弊分析

* 很明顯,策略模式提供了一套可擴充套件的演算法族,使用者可以自定義行為呼叫對應的演算法進行處理,增強了**的靈活性和可擴充套件性

* 在類結構中,每一種演算法的新增,都需要定義對應的類。這在大型專案中很容易造成類結構過於臃腫!

五,個人理解 --> 工廠模式和策略模式

* 工廠模式提供了乙個物件

* 策略模式提供了乙個功能介面

java 設計模式 策略模式

就是比較兩個類別時,要自己寫乙個比較器,這個比較器實現了 comparator介面,裡面實現public int compare object o1,object o2 方法。在實體類裡面要有乙個成員變數時這個比較器,這個實體類也要實現了 comparable介面。例如 cat有兩個屬性,heigh...

java設計模式 策略模式

策略模式 strategy pattern 體現了兩個非常基本的物件導向設計的原則 1 封裝變化的概念 2 程式設計中使用介面,而不是對介面的實現。策略模式定義了乙個共同的抽象演算法介面,其子類實現這個介面定義的方法,並且都有各自不同的實現,這些演算法實現可以在客戶端呼叫它們的時候互不影響的變化。子...

設計模式 java策略模式

相關的資料網上很多,我這裡自己總結一下。策略模式就是為了達到乙個目標,可以有多種方法 即多種策略 採用,為了減少類與類之間的耦合,所以採用如下措施 設定乙個介面,inte ce strategy,裡面有未實現的方法dothings strategya 繼承 strategy,strategyb 也繼...