策略模式可以用于重构if else的场景,常见的例子是支付方式的处理。假设我们有一个支付系统,支持支付宝、微信和银联三种支付方式,现在需要根据用户选择的支付方式来进行不同的处理。
传统的if-else实现方式
def pay(payment_method, amount):
if payment_method == 'alipay':
# 支付宝支付逻辑
pass
elif payment_method == 'wechat_pay':
# 微信支付逻辑
pass
elif payment_method == 'union_pay':
# 银联支付逻辑
pass
策略模式重构
使用策略模式可以将不同的支付方式抽象成一个个策略类:
class PaymentStrategy:
def pay(self, amount):
pass
class AliPayStrategy(PaymentStrategy):
def pay(self, amount):
# 支付宝支付逻辑
pass
class WechatPayStrategy(PaymentStrategy):
def pay(self, amount):
# 微信支付逻辑
pass
class UnionPayStrategy(PaymentStrategy):
def pay(self, amount):
# 银联支付逻辑
pass
然后在支付时只需要根据用户选择的支付方式来选择对应的策略类进行支付:
def pay(payment_method, amount):
if payment_method == 'alipay':
strategy = AliPayStrategy()
elif payment_method == 'wechat_pay':
strategy = WechatPayStrategy()
elif payment_method == 'union_pay':
strategy = UnionPayStrategy()
strategy.pay(amount)
这样代码就变得更加简洁,也更加易于扩展和维护。每种支付方式的具体实现被封装到了对应的策略类中,可以方便地新增或修改支付方式,而不会影响到原有的代码逻辑。