Python 之策略模式

2020-02-02  本文已影响0人  极客匠

简介:策略模式(Pattern:Strategy)属于行为型模式,是指对一系列的算法定义,并将每一个算法封装起来,而且他们是可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

模式架构

特性

优点

缺点

应用场景

代码示例

我们以超市做活动场景来举例子。

from abc import ABCMeta, abstractmethod


class CashSuper(object):

    @abstractmethod
    def acceptCash(self):
        pass


class CashNormal(CashSuper):

    def acceptCash(self, money):
        return money


class CashRebate(CashSuper):

    def __init__(self, moneyRebate):
        self.moneyRebate = moneyRebate

    def acceptCash(self, money):
        return money * self.moneyRebate


class CashReturn(CashSuper):

    def __init__(self, moneyCondition, moneyReturn):
        self.moneyCondition = moneyCondition
        self.moneyReturn = moneyReturn

    def acceptCash(self, money):
        if money > self.moneyCondition:
            return money - money / self.moneyCondition * self.moneyReturn


class CashContext(object):
    def __init__(self, rate):
        self.cashSuper = self.getCashSuper(rate)

    def getCashSuper(self, rate):
        if rate == "正常收费":
            return CashNormal()
        elif rate == "满1000减100":
            return CashReturn(1000, 100)
        elif rate == "打8折":
            return CashRebate(0.8)

    def getResult(self, money):
        return self.cashSuper.acceptCash(money)


if __name__ == '__main__':
    number = 300
    price = 20
    cashContext = CashContext("正常收费")
    result = cashContext.getResult(number * price)
    print("正常收费为:%d" % result)

    cashContext = CashContext("打8折")
    result = cashContext.getResult(number * price)
    print("打折收费为:%d" % result)

    cashContext = CashContext("满1000减100")
    result = cashContext.getResult(number * price)
    print("打折收费为:%d" % result)

  

每天多努力那么一点点,积少成多

上一篇 下一篇

猜你喜欢

热点阅读