策略模式將多種演算法封裝於獨立的策略類別中,每個策略類別都實現了一個共同的策略執行介面。使用者在系統運行時得以動態選擇、切換演算法達成相同目標。
假設我們正在開發購物車系統,需要支援多種支付方式,如PayPal、信用卡和銀行轉帳。使用策略模式可以讓我們輕鬆切換和擴展不同的支付策略。
PayPalPayment
、CreditCardPayment
和 BankTransferPayment
。from abc import ABC, abstractmethod
# 策略介面 - 支付策略
class PaymentStrategy(ABC):
@abstractmethod
def pay(self, amount):
pass
# 具體策略:PayPal
class PayPalPayment(PaymentStrategy):
def pay(self, amount):
print(f"使用 PayPal 支付 {amount} 元")
# 具體策略:信用卡
class CreditCardPayment(PaymentStrategy):
def pay(self, amount):
print(f"使用信用卡支付 {amount} 元")
# 上下文 - 購物車
class ShoppingCart:
def __init__(self, payment_strategy: PaymentStrategy):
self.payment_strategy = payment_strategy
def checkout(self, amount):
self.payment_strategy.pay(amount)
# 使用
cart = ShoppingCart(PayPalPayment())
cart.checkout(100) # 輸出: 使用 PayPal 支付 100 元
cart.payment_strategy = CreditCardPayment()
cart.checkout(200) # 輸出: 使用信用卡支付 200 元
透過使用策略模式,購物車系統能夠靈活地切換不同的支付方式,並且方便地添加新的支付方法。
這種設計不僅簡化了系統中各個支付策略的管理,也使得支付功能的擴展和維護更加高效和靈活。