策略模式,指物件有某個行為,但是在不同的場景中,該行為有不同的實現演算法。比如每個人都要「交個人所得稅」,但是「在美國交個人所得稅」和「在中國交個人所得稅」就有不同的算稅方法。
許多相關類僅僅是行為不同。
需要使用乙個演算法的不同實現。
演算法使用了客戶不應該知道的資料。策略模式可以避免暴露複雜的、與演算法相關的資料結構。
乙個類定義了很多行為,而且這些行為在這個類裡的操作以多個條件語句的形式出現。策略模式將相關的條件分支移入它們各自的 strategy 類中以代替這些條件語句。
首先定義策略介面:
該介面定義了乙個抽象的演算法。/**
* 乙個具體的策略應該實現該介面,並且乙個上下文物件context應該持有該介面的引用
* @author dengfengdecao
*
*/
public
inte***ce
strategy
有了策略介面,接下來就是乙個個具體的策略了:
public
class
firststrategy
implements
strategy
}
public
class
secondstrategy
implements
strategy
}
以上定義了三個具體策略。接下來需要乙個上下文物件:public
class
thirdstrategy
implements
strategy
}
在這個物件裡,引用了策略介面,並定義了乙個建構函式來傳遞具體的策略物件。/**
* 配置具體的策略並持有乙個strategy介面的引用
* @author dengfengdecao
*
*/
public
class
context
public
void
execute
()
}
最後在客戶端測試:
結果:public
class
strategyclient
}
乙個更具體的例子可參考此文:
Java設計模式之行為型模式(命令模式)
命令模式由三部分構成 invoker 命令觸發器 executor 命令處理器 responder 命令響應器 命令模式將客戶端 也就是這裡的invoker命令觸發器 與服務端 responder命令響應器 兩者解耦。客戶端只需要關注自己傳送哪一條命令,而無需關注服務端的實現細節 服務端只需關注命令...
Java設計模式之行為型模式(狀態模式)
狀態模式允許乙個物件在其內部狀態改變時改變它的行為。物件看起來似乎修改了它的類。uml圖 已經上了注釋,很簡單,大家領會一下狀態模式的思想。author hanlin wang public class statemode 定義狀態類 class state public string getval...
23種設計模式之行為型模式 策略模式
策略模式它定義了演算法家族,分別封裝起來,讓它們之間可以相互替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。減少各種演算法類與使用演算法類之間的耦合 比如 商場收銀時如何 用打折還是返利,其實都是一些演算法,用工廠來生成演算法物件,這沒錯,但演算法本身只是一種策略,最重要的是這些演算法是隨時...