设计模式之二--策略模式

策略模式:这种模式比较适合,同一个问题又多种解决方法类型的设计。
这里以商场打打折促销为例,商场打折对不同的商品可能又不同的打着方式,比如打八折,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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值