策略模式是一種定義一系列演算法的方法,所有這些演算法完成的都是相同的工作,只是實現不同,它可以以相同的方式呼叫所有的演算法,減少了各種演算法類與使用演算法類之間的耦合。
策略模式是用來封裝演算法的,在實踐中,可以用來封裝幾乎任何型別的變化。
在超市現金收費演算法中,有正常收費,滿300-100,打8折等多種收費方式,把收費演算法 cashsuper 看成抽象策略。
各種收費方式看成具體的策略類,繼承 cashsuper 抽象基類
其中 cashcontext 用來創造具體策略類的例項,呼叫其具體的策略演算法。
在 cashcontext 中的 switch 分支進行簡單工廠模式的結合,根據字串進行判斷,與客戶端徹底分離,客戶端中只需維持乙個 cashcontext 的物件。
//抽象策略
public
abstract
class
cashsuper
//具體的策略類,實現各種的收費演算法
public
class
cashnormal
extends
cashsuper
}public
class
cashrebate
extends
cashsuper
@override
public
double
acceptcash
(double money)
}public
class
cashreturn
extends
cashsuper
@override
public
double
acceptcash
(double money)
}//上下文物件,結合簡單工廠模式
public
class
cashcontext
}//根據上下文運用多型呼叫各自的收費演算法
public
double
getresult
(double money)
//客戶端
public
static
void
main
(string[
] args)
throws exception
}
輸出
收費為1000.0
收費為600.0
收費為800.0
設計模式 二 策略模式
定義演算法家族,分別封裝起來,讓它們之間可以互相替換,讓演算法變化,不會影響到使用者 good 適合類中的成員以方法為主,演算法經常變動 簡化了單元測試 因為每個演算法都有自己的類,可以通過自己的介面單獨測試。策略模式和簡單工廠基本相同,但簡單工廠模式只能解決物件建立問題,對於經常變動的演算法應使用...
設計模式(二) 策略模式
策略模式 strategy 它定義了乙個演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。現金收費抽象類 abstract class cashsuper 正常收費子類 class cashnormal cashsuper 打折收費子類 class ...
設計模式(二) 策略模式
策略模式定義了演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。我們來實現乙個簡單的商場收銀軟體功能來闡述策略模式 1.我們先來定義乙個收費方式的基類,如下 using system namespace strategy 2.收費方案,如下 usin...