設計模式之二 策略模式

2021-10-07 04:38:04 字數 1835 閱讀 9688

策略模式:這種模式比較適合,同乙個問題又多種解決方法型別的設計。

這裡以商場打打折**為例,商場打折對不同的商品可能又不同的打著方式,比如打八折,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 ...