#策略模式strategy
#概念定义:定义一系列算法,把他们一个个封装起来,并且使他们之间可以互相替换,从而让算法可以独立于使用它的用户而变化
#适用范围:不同时间应用不同业务规则的情况
#超市促销打折,周年庆可能搞部分商品打折,部分商品满减,部分商品积分,等活动
#计算最终价格
class Discount(object): #优惠计算抽象类
finalPrice = 0
def calc(self,currentPrice):
raise Exception('子类未实现该方法')
class Normal(Discount):#正常收费
def calc(self,currentPrice):
self.finalPrice = currentPrice
return self.finalPrice
class Reduce(Discount):#打折
reduceNum = 1.0 #打折数
def setReduceNum(self,num):
self.reduceNum = num
def calc(self,currentPrice,):
self.finalPrice = currentPrice*self.reduceNum
return self.finalPrice
class Fullreduce(Discount): #满减
fullPrice = 0
returnPrice = 0
def setFullAndReturnPrice(self,fullPrice,returnPrice):
self.fullPrice = fullPrice
self.returnPrice = returnPrice
def calc(self,currentPrice):
if currentPrice>=self.fullPrice:
self.finalPrice = currentPrice-self.returnPrice
else:
self.finalPrice = self.fullPrice
return self.finalPrice
class Context(object): #context
def __init__(self,type):
self.discount1 = Factory().getDiscount(type)
def calcExec(self,currentPrice):
return self.discount1.calc(currentPrice)
class Factory: #与简单工厂相结合
discount = None
def getDiscount(self,type):
if type=='正常':
self.discount = Normal()
elif type == '打折':
self.discount = Reduce()
elif type == '满减':
self.discount = Fullreduce()
return self.discount
if __name__ == '__main__':
context = Context('打折')
context.discount1.setReduceNum(0.7)
print(context.calcExec(500))