策略模式將多種演算法封裝於獨立的策略類別中,每個策略類別都實現了一個共同的策略執行介面。使用者在系統運行時得以動態選擇、切換演算法達成相同目標。

關鍵影響
- 靈活性與擴展性:可以輕鬆更換演算法,使得應用更靈活,容易增加新功能。
- 降低耦合、簡化管理:不同的演算法彼此獨立不會互相影響,更容易管理與維護。
- 快速適應變化:可以快速添加新的策略以應對變化,無需大幅修改現有架構。
應用場景
假設我們正在開發購物車系統,需要支援多種支付方式,如PayPal、信用卡和銀行轉帳。使用策略模式可以讓我們輕鬆切換和擴展不同的支付策略。
組件設計:
- 策略介面(Strategy Interface):定義了一個共通的支付介面,所有的支付策略都必須實現這個介面。
- 具體策略(Concrete Strategies):為每種支付方式實現具體的支付策略,例如
PayPalPayment
、CreditCardPayment
和BankTransferPayment
。 - 上下文(Context):購物車,將使用根據用戶的選擇動態切換不同的支付策略。
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 元
結論
透過使用策略模式,購物車系統能夠靈活地切換不同的支付方式,並且方便地添加新的支付方法。
這種設計不僅簡化了系統中各個支付策略的管理,也使得支付功能的擴展和維護更加高效和靈活。