軟體設計模式 | 策略模式

閱讀時間約 3 分鐘
策略模式將多種演算法封裝於獨立的策略類別中,每個策略類別都實現了一個共同的策略執行介面。使用者在系統運行時得以動態選擇切換演算法達成相同目標。
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

結論

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

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

avatar-img
66會員
19內容數
探索自我實現的小角落。沒有高高在上的教條,只有真實的分享和心得。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
動態記錄策略進出邏輯,自我檢討策略精進之處。
Thumbnail
本篇將分享給訂閱讀者關於作者本身目前之操作 (選股 )邏輯與針對未來一季的投資策略。
※ 單例模式介紹 ※ 定義:單例模式是一種設計模式,確保一個class(類)只有一個實例,並提供一個存取它的全域存取點。無論如何取值,皆只對這個實例取值。 ※ 目的:保證一個類別只會產生一個物件,而且提供存取該物件的統一方法。 ※ 講解:單例模式確保一個類無論怎麼 new 或 get,都只能拿
Thumbnail
好的策略思考,取決於反直覺的智力運用方式。傑出的策略思考者能容忍模糊性、察覺微弱信號、定義核心挑戰,並設計有效對策。本書透過實例解析致勝策略的邏輯,協助讀者獲得能應用在組織建構及個人發展的精微技巧。
Thumbnail
接續上一講,繼續來講框架。 要知道起手式不僅不能為策略定調,即使是同樣的框架,也可能是完全不同的策略...
Thumbnail
本文介紹如何理解並找回自己做決策的方式,以便更好地影響日常生活中的各類決策,並探討了策略和權威之間的相互關係。文章鼓勵讀者遵循內在權威並執行策略,以確保每一個決策都是舒服、順暢的。另外,也提供了與作者一起討論的方式。需確保提供的出生時間精確,以取得精準的解讀內容。
Thumbnail
接下來的講座將帶給同學們一個全新的策略設計觀點,一般選擇權教學絕對教不來的知識,這也是有驚無險流的策略之所以比別家的策略有效的重要原因。 篇幅較長,所以會拆成兩篇。
Thumbnail
一個好的策略不一定得很複雜,但必須得是有計畫的行事。 對於有驚無險流來說,完整的【策略】在流程上應該包含了策略三部曲。
Thumbnail
《決策的兩難》一書探討了整合思維的概念,這種思維模式可以幫助我們超越傳統的二元對立,找到創新的解決方案。這本書教導我們如何運用整合思維來解決複雜的難題,超越傳統的二選一思維模式。這種思維模式能夠幫助我們避免陷入傳統的二選一困境,開啟思路,發現更好的選擇。
進行了策略擴充,添加了「強多頭」以及「空方」兩種情況。期望除了原先的右側轉折作多策略外,將運用情境擴充,增加整體勝率與報酬率。
Thumbnail
動態記錄策略進出邏輯,自我檢討策略精進之處。
Thumbnail
本篇將分享給訂閱讀者關於作者本身目前之操作 (選股 )邏輯與針對未來一季的投資策略。
※ 單例模式介紹 ※ 定義:單例模式是一種設計模式,確保一個class(類)只有一個實例,並提供一個存取它的全域存取點。無論如何取值,皆只對這個實例取值。 ※ 目的:保證一個類別只會產生一個物件,而且提供存取該物件的統一方法。 ※ 講解:單例模式確保一個類無論怎麼 new 或 get,都只能拿
Thumbnail
好的策略思考,取決於反直覺的智力運用方式。傑出的策略思考者能容忍模糊性、察覺微弱信號、定義核心挑戰,並設計有效對策。本書透過實例解析致勝策略的邏輯,協助讀者獲得能應用在組織建構及個人發展的精微技巧。
Thumbnail
接續上一講,繼續來講框架。 要知道起手式不僅不能為策略定調,即使是同樣的框架,也可能是完全不同的策略...
Thumbnail
本文介紹如何理解並找回自己做決策的方式,以便更好地影響日常生活中的各類決策,並探討了策略和權威之間的相互關係。文章鼓勵讀者遵循內在權威並執行策略,以確保每一個決策都是舒服、順暢的。另外,也提供了與作者一起討論的方式。需確保提供的出生時間精確,以取得精準的解讀內容。
Thumbnail
接下來的講座將帶給同學們一個全新的策略設計觀點,一般選擇權教學絕對教不來的知識,這也是有驚無險流的策略之所以比別家的策略有效的重要原因。 篇幅較長,所以會拆成兩篇。
Thumbnail
一個好的策略不一定得很複雜,但必須得是有計畫的行事。 對於有驚無險流來說,完整的【策略】在流程上應該包含了策略三部曲。
Thumbnail
《決策的兩難》一書探討了整合思維的概念,這種思維模式可以幫助我們超越傳統的二元對立,找到創新的解決方案。這本書教導我們如何運用整合思維來解決複雜的難題,超越傳統的二選一思維模式。這種思維模式能夠幫助我們避免陷入傳統的二選一困境,開啟思路,發現更好的選擇。
進行了策略擴充,添加了「強多頭」以及「空方」兩種情況。期望除了原先的右側轉折作多策略外,將運用情境擴充,增加整體勝率與報酬率。