策略模式:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换,本模式使得算法可以独立于使用它们的客户而变化
角色:
- 抽象策略
- 具体策略
- 上下文:把策略对象和数据对象封装进来,以及其他不需要用户知道的数据
优点:定义了一系列可重用的算法和行为,消除了一些条件语句
缺点:客户必须了解不同的策略。因为切换策略的动作在高层代码中进行,写高层代码的人(即客户)只有知道了各个策略有何不同,才能知道在什么情况下,用什么策略
from abc import ABCMeta, abstractmethod
class Strategy(metaclass=ABCMeta):
@abstractmethod
def execute(self, data):
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,data,strategy):
self.data=data
self.strategy=strategy
def set_strategy(self,strategy):
self.strategy=strategy
def do_strategy(self):
self.strategy.execute(self.data)
data='...'
s1=FastStrategy()
s2=SlowStrategy()
context=Context(data,s1)
context.do_strategy()
context.set_strategy(s2)
context.do_strategy()
'''
用快的策略处理...
用慢的策略处理...
'''
浙公网安备 33010602011771号