设计模式-策略模式
# 策略接口:支付方式
class PaymentStrategy:
def pay(self, amount):
pass
# 具体策略类:支付宝支付
class AlipayStrategy(PaymentStrategy):
def pay(self, amount):
print(f"支付宝支付:{amount}元,使用花呗付款")
# 具体策略类:微信支付
class WechatPayStrategy(PaymentStrategy):
def pay(self, amount):
print(f"微信支付:{amount}元,零钱余额不足请换卡支付")
# 具体策略类:银行卡支付
class BankCardStrategy(PaymentStrategy):
def pay(self, amount):
print(f"银行卡支付:{amount}元,尾号8866的储蓄卡")
# 上下文类:收银台
class CheckoutCounter:
def __init__(self):
self._strategy = None # 当前支付策略
def set_strategy(self, strategy):
"""动态切换支付策略"""
self._strategy = strategy
def checkout(self, amount):
"""执行支付"""
if self._strategy:
self._strategy.pay(amount)
else:
print("请先选择支付方式")
# 使用示例
counter = CheckoutCounter()
# 顾客选择支付宝支付
counter.set_strategy(AlipayStrategy())
counter.checkout(100) # 输出:支付宝支付:100元,使用花呗付款
# 顾客临时改用微信支付
counter.set_strategy(WechatPayStrategy())
counter.checkout(200) # 输出:微信支付:200元,零钱余额不足请换卡支付
# 突然新增一个支付方式(不影响原有代码)
class CreditCardStrategy(PaymentStrategy):
def pay(self, amount):
print(f"信用卡支付:{amount}元,享受12期免息")
counter.set_strategy(CreditCardStrategy())
counter.checkout(300) # 输出:信用卡支付:300元,享受12期免息