请用python代码说明一下策略模式
时间: 2023-07-03 18:13:26 浏览: 46
好的,以下是Python的策略模式示例代码:
```python
# 策略接口
class PaymentStrategy:
def pay(self, amount):
pass
# 现金支付策略
class CashPaymentStrategy(PaymentStrategy):
def pay(self, amount):
print("现金支付了 %d 元" % amount)
# 支付宝支付策略
class AliPaymentStrategy(PaymentStrategy):
def pay(self, amount):
print("支付宝支付了 %d 元" % amount)
# 微信支付策略
class WechatPaymentStrategy(PaymentStrategy):
def pay(self, amount):
print("微信支付了 %d 元" % amount)
# 上下文类
class PaymentContext:
def __init__(self, payment_strategy):
self.payment_strategy = payment_strategy
def execute_payment(self, amount):
self.payment_strategy.pay(amount)
# 客户端代码
if __name__ == '__main__':
cash_payment = CashPaymentStrategy()
ali_payment = AliPaymentStrategy()
wechat_payment = WechatPaymentStrategy()
payment_context = PaymentContext(cash_payment)
payment_context.execute_payment(100)
payment_context = PaymentContext(ali_payment)
payment_context.execute_payment(200)
payment_context = PaymentContext(wechat_payment)
payment_context.execute_payment(300)
```
在这个例子中,我们定义了一个策略接口 `PaymentStrategy`,并实现了三个支付策略:`CashPaymentStrategy`、`AliPaymentStrategy`、`WechatPaymentStrategy`。针对不同的支付方式,每个支付策略类都实现了 `pay()` 方法。
接着,我们定义了一个上下文类 `PaymentContext`,其构造函数接收一个支付策略对象,并提供了一个 `execute_payment()` 方法来执行支付操作。客户端代码可以根据需要选择不同的支付策略,然后调用上下文类的 `execute_payment()` 方法即可完成支付。
这种设计模式的好处是,客户端代码不需要关心具体的支付实现细节,只需要知道如何使用上下文类即可。如果需要增加新的支付方式,只需要实现一个新的支付策略类,并将其传递给上下文类即可,符合开闭原则。