一,策略模式
策略模式定義了一套演算法族, 對每一種演算法進行封裝, 並提供乙個頂層的介面或者抽象類滿足演算法間的互換
二,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 也繼...