Python設(shè)計模式中的行為型策略模式
更新時間:2022年02月15日 09:58:42 作者:范桂颶
這篇文章主要介紹了Python設(shè)計模式中的行為型策略模式,策略模式即Strategy?Pattern,其定義了算法家族,分別封裝起來,讓他們之間可以相互替換,此模式讓算法的變化,不會影響到使用算法的客戶,下文相關(guān)資料具有一點的參考價值,需要的小伙伴可以參考一下
一、策略模式
策略模式中,首先定義了一系列不同的算法,并把它們一一封裝起來,然后在策略類中,使這些算法可以相互替換。這意味著,讓一個類的行為(算法)可以在類的實例化對象運行時進行更改。
優(yōu)點:
- 定義了一系列可重用的算法和行為。
- 消除了一些條件語句。
- 可以提供相同行為的不同實現(xiàn)。
缺點:
Client必須了解不同的策略行為細節(jié)。
二、應(yīng)用場景
根據(jù)不同的客戶屬性,采用不同的折扣策略來計算訂單中的商品價格:
- 有 1000 或以上積分的客戶,每個訂單享 5% 折扣。
- 同一訂單中,單個商品的數(shù)量達到 20 個或以上,享 10% 折扣。
- 訂單中的不同商品達到 10 個或以上,享 7% 折扣。
三、代碼示例

實體角色:
- 上下文(Context):集成了算法的類。
- 抽象策略(Strategy):實現(xiàn)不同算法的組件的共同接口。
- 具體策略(Concrete Strategy):抽象策略的具體子類。
import abc
# 抽象策略
class Strategy(metaclass=abc.ABCMeta):
? ? @abc.abstractmethod
? ? def execute(self, data):
? ? ? ? pass
# 具體策略 1
class Strategy1(Strategy):
? ? def execute(self, data):
? ? ? ? print(f"使用策略1執(zhí)行{data}")
# 具體策略2?
class Strategy2(Strategy):
? ? def execute(self, data):
? ? ? ? print(f"使用策略2執(zhí)行{data}")
# 上下文
class Context:
? ? def __init__(self, data):
? ? ? ? self.strategy = None
? ? ? ? self.data = data
? ? def set_strategy(self, strategy):
? ? ? ? self.strategy = strategy
? ? def do_strategy(self):
? ? ? ? if self.strategy:
? ? ? ? ? ? self.strategy.execute(self.data)
? ? ? ? else:
? ? ? ? ? ? print("請先配置策略!")
if __name__ == "__main__":
? ? data = "測試數(shù)據(jù)"
? ? s1 = Strategy1()
? ? s2 = Strategy2()
? ? context = Context(data)
? ? context.set_strategy(s1)
? ? context.do_strategy()
? ? context.set_strategy(s2)
? ? context.do_strategy()到此這篇關(guān)于Python設(shè)計模式中的行為型策略模式的文章就介紹到這了,更多相關(guān)Python策略模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python基礎(chǔ)教程之tcp socket編程詳解及簡單實例
這篇文章主要介紹了Python基礎(chǔ)教程之tcp socket編程詳解及簡單實例的相關(guān)資料,需要的朋友可以參考下2017-02-02
python networkx 包繪制復(fù)雜網(wǎng)絡(luò)關(guān)系圖的實現(xiàn)
這篇文章主要介紹了python networkx 包繪制復(fù)雜網(wǎng)絡(luò)關(guān)系圖的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07

