標籤(空格分隔): 設計模式算法
行爲型模式。
一個類的行爲或者其算法能夠在運行時更改。設計模式
策略模式與狀態模式相似,但Context類中包含一個strategy接口的引用,而不是state接口的引用。設計
策略的選擇是客戶端決定的,不一樣的策略最終都是爲了達到同一個效果。例如排序算法有不少種,能夠使用策略模式來動態替換排序算法。對象
類結構圖
blog
角色
環境類(Context):用一個ConcreteStrategy對象來配置。維護一個對Strategy對象的引用。可定義一個接口來讓Strategy訪問它的數據。
抽象策略類(Strategy):定義全部支持的算法的公共接口。 Context使用這個接口來調用某ConcreteStrategy定義的算法。
具體策略類(ConcreteStrategy):以Strategy接口實現某具體算法。排序
注意
(1)與狀態模式不一樣,狀態模式的狀態轉換在內部實現,而策略模式的策略選擇由客戶端選擇,即外部選擇。
(2)狀態模式的狀態轉換有約束條件,一個狀態只能轉成下一個狀態,而策略模式能夠隨意替換,沒有約束。
(3)策略模式只是在對象初始化的時候更改執行模式,而狀態模式是根據對象實例的週期時間而動態地改變對象實例的執行模式。接口