2024-04-24|閱讀時間 ‧ 約 25 分鐘

軟體設計模式 | 策略模式

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

關鍵影響

  1. 靈活性與擴展性:可以輕鬆更換演算法,使得應用更靈活,容易增加新功能。
  2. 降低耦合簡化管理:不同的演算法彼此獨立不會互相影響,更容易管理與維護。
  3. 快速適應變化:可以快速添加新的策略以應對變化,無需大幅修改現有架構。

應用場景

假設我們正在開發購物車系統,需要支援多種支付方式,如PayPal、信用卡和銀行轉帳。使用策略模式可以讓我們輕鬆切換和擴展不同的支付策略。

組件設計:

  • 策略介面(Strategy Interface):定義了一個共通的支付介面,所有的支付策略都必須實現這個介面。
  • 具體策略(Concrete Strategies):為每種支付方式實現具體的支付策略,例如 PayPalPaymentCreditCardPaymentBankTransferPayment
  • 上下文(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

結論

透過使用策略模式,購物車系統能夠靈活地切換不同的支付方式,並且方便地添加新的支付方法。

這種設計不僅簡化了系統中各個支付策略的管理,也使得支付功能的擴展和維護更加高效和靈活。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.