策略模式:這種模式比較適合,同乙個問題又多種解決方法型別的設計。
這裡以商場打打折**為例,商場打折對不同的商品可能又不同的打著方式,比如打八折,300減100等等打折方式,這樣的實際問題就很適合使用策略模式。
from abc import abcmeta, abstractmethod
class
context
:def
__init__
(self, strategy_type)
: self.strategy = self.__decide_strategy(strategy_type)
def__decide_strategy
(self, strategy_type)
:if strategy_type is
"normal"
:return normalcasher(
)if strategy_type is
"rebate"
:return rebatecasher(
300,
100)
if strategy_type is
"discount"
:return discountcasher(
0.8)
defget_cash
(self, money)
:print
(self.strategy)
return self.strategy.get_cash(money)
class
supercasher
(metaclass=abcmeta)
: @abstractmethod
defget_cash
(self, money)
:pass
class
normalcasher
(supercasher)
:def
__init__
(self)
:pass
defget_cash
(self, money)
:return money
class
rebatecasher
(supercasher)
:def
__init__
(self, condition,rebate)
: self.rebate = rebate
self.condition = condition
defget_cash
(self, money)
: rate = money / self.condition
return money - self.rebate * rate
class
discountcasher
(supercasher)
:def
__init__
(self, discount)
: self.discount = discount
defget_cash
(self, money)
:return money * self.discount
if __name__ ==
"__main__"
: cash_strategy = context(
"discount"
) result = cash_strategy.get_cash(
300)
print
("the result is"
, result)
設計模式之二 策略模式
在讀大話模式,對策略模式進行筆記,學習總結 首先,模擬商場裡的收費系統,計算該商品的總的金額,假如搞 互動,可能是打折 可能是買多少反現多少 有如下 void test 0 cout 需要付款 dtotal endl 那麼這麼寫,所有的業務邏輯都在客戶的 中,在物件導向的思想中,是要將這些邏輯封裝起...
設計模式 二 策略模式
定義演算法家族,分別封裝起來,讓它們之間可以互相替換,讓演算法變化,不會影響到使用者 good 適合類中的成員以方法為主,演算法經常變動 簡化了單元測試 因為每個演算法都有自己的類,可以通過自己的介面單獨測試。策略模式和簡單工廠基本相同,但簡單工廠模式只能解決物件建立問題,對於經常變動的演算法應使用...
設計模式(二) 策略模式
策略模式 strategy 它定義了乙個演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。現金收費抽象類 abstract class cashsuper 正常收費子類 class cashnormal cashsuper 打折收費子類 class ...