假设双11 的满减金额每年都会变化,今年是满 400 减 50 ,明年可能变成满 350 减 40 ,后面又变成满 300 件 25 。请重新编写代码定义函数达到当满减金额变化后,不需要修改函数,只需要调用函数就可以计算清空购物车要花多少钱的功能
时间: 2024-09-29 10:09:46 浏览: 27
为了实现这个功能,你可以创建一个装饰器模式(Decorator Pattern)来动态地改变满减规则。首先,定义一个基础的`DiscountCalculator`类,它有一个计算价格的方法。然后,每次满减金额变化时,你可以创建一个新的类,比如`PromoRule`系列,它们继承自`DiscountCalculator`并覆盖`calculate_total`方法,实现新的满减策略。
```python
# 基础折扣计算器
class DiscountCalculator:
def calculate_total(self, total):
return total
# 满减装饰器
class PromotionRule(DiscountCalculator):
def __init__(self, min_amount, reduction):
self.min_amount = min_amount
self.reduction = reduction
def calculate_total(self, total):
if total >= self.min_amount:
return total - self.reduction
else:
return total
# 双十一促销规则示例
def change_promotion(min_amount, reduction):
def decorator(func):
def wrapper(total):
rule = PromotionRule(min_amount, reduction)
return rule.calculate_total(func(total))
return wrapper
return decorator
# 使用装饰器定义满减函数
@change_promotion(400, 50)
def calculate_cart_total(total):
# 这里假设total是购物车商品总金额
return total
# 调用函数计算费用
cart_total = calculate_cart_total(600) # 如果满400元则减免50元
print(f"清空购物车需要 {cart_total} 元")
# 现在如果有新的满减规则,只需再次调用change_promotion装饰器即可
new_rule = change_promotion(350, 40)
calculate_cart_total = new_rule(calculate_cart_total)
cart_total = calculate_cart_total(700) # 如果满350元则减免40元
```