策略模式:这种模式比较适合,同一个问题又多种解决方法类型的设计。
这里以商场打打折促销为例,商场打折对不同的商品可能又不同的打着方式,比如打八折,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)
def get_cash(self, money):
print(self.strategy)
return self.strategy.get_cash(money)
class SuperCasher(metaclass=ABCMeta):
@abstractmethod
def get_cash(self, money):
pass
class NormalCasher(SuperCasher):
def __init__(self):
pass
def get_cash(self, money):
return money
class RebateCasher(SuperCasher):
def __init__(self, condition,rebate):
self.rebate = rebate
self.condition = condition
def get_cash(self, money):
rate = money / self.condition
return money - self.rebate * rate
class DiscountCasher(SuperCasher):
def __init__(self, discount):
self.discount = discount
def get_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)