- 内容:定义一系列的算法,把它们一个一个的封装起来,并且使它们可以相互替换。本模式使得算法可独立于使用它的客户而变化。
- 角色:
- 抽象策略(Strategy)
- 具体策略(ConcreteStrategy)
- 上下文(Context)
- 举个例子
需求:比如滴滴打车的速度调度策略,可以选择调度开快车,也可以调度开慢车。
from abc import ABCMeta, abstractmethodclass Strategy(metaclass=ABCMeta):@abstractmethod# 执行策略def execute(self, data):passclass 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 = dataself.strategy = strategy# 切换策略def set_strategy(self, strategy):self.strategy = strategydef do_strategy(self):self.strategy.execute(self.data)# client
data = "[...]"
s1 = FastStrategy()
s2 = SlowStrategy()
context = Context(s1, data)
context.do_strategy()
context.set_strategy(s2)
context.do_strategy()
- 优点:
- 定义了一系列可重复使用的算法和行为
- 消除了一些条件语句
- 可以提供相同行为的不同实现
- 缺点:
- 客户必须了解不同策略