strategy
模式也叫策略模式,是由
gof提出的
23種軟體設計模式的一種。
strategy
模式是行為模式之一,它對一系列的演算法加以封裝,為所有演算法定義乙個抽象的演算法介面,並通過繼承該抽象演算法介面對所有的演算法加以封裝和實現,具體的演算法選擇交由客戶端決定(策略)。
strategy
模式主要用來平滑地處理演算法的切換。
概要:
- strategy
模式定義乙個演算法族,並把每一種可能的演算法封裝成乙個類,這些演算法可以在應用程式內部被動態替換。策略模式可以降低客戶端與演算法之間的耦合關係。 -
這些演算法具有乙個相同的抽象介面,具體的演算法通過繼承的子類實現。
乙個應用程式需要動態切換演算法的時候,
strategy
模式便變得非常有用。
strategy模式的應用場景一般是:
- 具有多種可能需要實現的演算法 -
需要在程式中對演算法進行動態切換
strategy
模式uml類圖
strategy
策略(演算法)抽象。
concretestrategy
各種策略(演算法)的具體實現。
context
策略的外部封裝類,或者說策略的容器類。根據不同策略執行不同的行為。策略由外部環境決定。
strategy
模式的應用範例
為了幫助理解,我們舉例來說明。
我們的程式要實現加密功能。加密有乙個加密演算法,加密演算法有很多種,比如
md5,
des等,我們的程式需要實現這個功能,就是可以讓使用者選擇不同的加密演算法進行加密。
這個過程我們可以用
strategy
模式來實現。
檔案一覽:
client
測試類。
encryptstrategy
相當於strategy
角色。加密演算法的抽象類
/介面。
desstrategy
相當於concretestrategy
角色。des
加密演算法。
md5strategy
相當於concretestrategy
角色。md5
加密演算法。
encryptcontext
相當於context
角色。
**:
package
zieckey
.designpatterns
.study
.strategy
;/**
* *
客戶端測試程式。
* @author zieckey**/
public
class
client
}package
zieckey
.designpatterns
.study
.strategy
;/**
* * context
* *
給客戶端呼叫的
* * @author zieckey
* @since 2008/06/21
*/public
class
encryptcontext
//執行具體的策略行為
public
void
encrypt()}
package
zieckey
.designpatterns
.study
.strategy
;/**
* *
加密演算法介面。
* 所有的加密演算法都必須實現該介面。
* 如果新增乙個加密演算法,那麼只需要實現該介面,而現有的程式**都不用改變。
* * @author zieckey
* @since 2008/06/21
*/public
inte***ce
iencryptstrategy
package
zieckey
.designpatterns
.study
.strategy
;/**
* 具體的加密演算法
* @author zieckey**/
public
class
md5strategy
implements
iencryptstrategy
}package
zieckey
.designpatterns
.study
.strategy
;/**
* 具體的加密演算法
* @author zieckey**/
public
class
desstrategy
implements
iencryptstrategy}
測試輸出:
encrypt by des algorithm
.encrypt by md5 algorithm.
推薦**:好巴鹿(http://
www.haobalu.com )
策略模式 Strategy
public context string strategytype df對策略模式的定義是這樣的 它定義了演算法家族,分別封裝起來,讓它們之間可以相互替換,此模式讓演算法的變化不會影響到使用演算法的客戶 main函式 abstract class strategy class concretest...
策略模式 Strategy
定義 定義一組演算法,將每個演算法都封裝起來,並且使他們之間可以互換。型別 行為類模式 結構圖 策略模式的優缺點 策略模式的主要優點有 策略模式的缺點主要有兩個 必須對客戶端 呼叫者 暴露所有的策略類,因為使用哪種策略是由客戶端來決定的,因此,客戶端應該知道有什麼策略,並且了解各種策略之間的區別,否...
策略模式Strategy
1 定義乙個抽象的類abstract class 類名 然後裡面定義乙個抽象策略 abstract void 方法名 例如 public abstract class strategy 2 寫子類繼承父類,實現各自的演算法,例如 public class concretestrategya exte...