一、定义
定义一系列的算法,把它们一个个封闭起来,并且使它们可相互替换。本模式使得算法可以独立于使用它的客户而变化
二、角色
1.抽象策略
2.具体策略
3.上下文
三、优缺点
1.定义了一系列可用重用的算法和行为
2.消除了一些条件语句
3.可以提供相同行为的不同实现
4.客户端必须了解不同的策略
四、示例
from abc import ABCMeta, abstractmethod
# 抽象策略
class Strategy(metaclass=ABCMeta):
@abstractmethod
def execute(self, data):
pass
# 具体策略
class FastStratege(Strategy):
def execute(self, data):
print("用较快的策略处理%s" % data)
# 具体策略
class SlowStratege(Strategy):
def execute(self, data):
print("用较快的策略处理%s" % data)
# 上下文
class Context(object):
def __init__(self, data, strategy):
self.data = data
self.strategy = strategy
def set_strategy(self, strategy):
self.strategy = strategy
def do_strategy(self):
self.strategy.execute()
# Client
data = "sdfsdf"
s = FastStratege()
context = Context(data=data, strategy=s)
context.do_strategy()
s2 = SlowStratege()
context.set_strategy(strategy=s2)
context.do_strategy()