1. 程式人生 > 實用技巧 >行為模式-策略模式

行為模式-策略模式

定義多演算法,把它們封裝起來,並且使它們可以相互替換。本模式使得演算法可獨立於使用它的客戶而變化。角色有:抽象策略、具體策略和上下文。

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! """

優點:定義了一些列可重用的演算法和行為;消除了一些條件語句;可以提供相同行為的不同實現;缺點:客戶必須瞭解不同的策略。