行為模式-策略模式
阿新 • • 發佈:2020-09-12
定義多演算法,把它們封裝起來,並且使它們可以相互替換。本模式使得演算法可獨立於使用它的客戶而變化。角色有:抽象策略、具體策略和上下文。
from abc import ABCMeta, abstractmethod from datetime import datetime # 抽象策略模式 class Strategy(metaclass=ABCMeta): @abstractmethod def execute(self, date): pass # 具體策略模式 class FastStrategy(Strategy): def execute(self, data):print("使用較快的策略處理%s" % data) class SlowStrategy(Strategy): def execute(self, data): print("使用較慢的策略處理%s" % data) # 上下文 class Context(): def __init__(self, strategy, data): self.data = data self.strategy = strategy # 可以定義使用者不知道的東西 self.date = datetime.now()def set_strategy(self, strategy): self.strategy = strategy def do_strategy(self): self.strategy.execute(self.data) data = "Hello!" # 使用較快的策略處理 fast_strategy = FastStrategy() context = Context(fast_strategy, data) context.do_strategy() # 使用較慢的策略處理 slow_strategy = SlowStrategy() context= Context(slow_strategy, data) context.do_strategy() """ 使用較快的策略處理Hello! 使用較慢的策略處理Hello! """
優點:定義了一些列可重用的演算法和行為;消除了一些條件語句;可以提供相同行為的不同實現;缺點:客戶必須瞭解不同的策略。