Python設(shè)計模式中的行為型策略模式
一、策略模式
策略模式中,首先定義了一系列不同的算法,并把它們一一封裝起來,然后在策略類中,使這些算法可以相互替換。這意味著,讓一個類的行為(算法)可以在類的實例化對象運行時進行更改。
優(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數(shù)據(jù)庫編程之pymysql詳解
本文主要介紹了Python數(shù)據(jù)庫編程中pymysql,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05Pytorch實現(xiàn)網(wǎng)絡(luò)部分層的固定不進行回傳更新問題及思路詳解
這篇文章主要介紹了Pytorch實現(xiàn)網(wǎng)絡(luò)部分層的固定不進行回傳更新,實現(xiàn)思路就是利用tensor的requires_grad,每一個tensor都有自己的requires_grad成員,值只能為True和False,具體內(nèi)容詳情跟隨小編一起看看吧2021-08-08使用Python讀取Excel數(shù)據(jù)在PPT中創(chuàng)建圖表
使用Python從Excel讀取數(shù)據(jù)并在PowerPoint幻燈片中創(chuàng)建圖表不僅能夠極大地簡化圖表創(chuàng)建過程,通過Python這一橋梁,我們可以輕松實現(xiàn)數(shù)據(jù)自動化處理和圖表生成,本文將演示如何使用Python讀取Excel數(shù)據(jù)在PPT中創(chuàng)建圖表,需要的朋友可以參考下2024-08-08python自動化測試selenium核心技術(shù)處理彈框
這篇文章主要為大家介紹了python自動化測試selenium核心技術(shù)處理彈框的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11Python標(biāo)準(zhǔn)庫之time庫的使用教程詳解
這篇文章主要介紹了Python的time庫的使用教程,文中有非常詳細的代碼示例,對正在學(xué)習(xí)python基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下2022-04-04Python算法輸出1-9數(shù)組形成的結(jié)果為100的所有運算式
這篇文章主要介紹了Python算法輸出1-9數(shù)組形成的結(jié)果為100的所有運算式,然后介紹了另外一個相關(guān)實例,具體內(nèi)容請參閱正文,需要的朋友可以參考下。2017-11-11