网站建设齐齐哈尔,网站制作教程迅雷下载,网站首页图片切换代码,制作网线的基本步骤内容#xff1a;定义一系列的算法#xff0c;把它们一个一个的封装起来#xff0c;并且使它们可以相互替换。本模式使得算法可独立于使用它的客户而变化。角色#xff1a; 抽象策略#xff08;Strategy#xff09;具体策略#xff08;ConcreteStrategy#xff09;上下文…内容定义一系列的算法把它们一个一个的封装起来并且使它们可以相互替换。本模式使得算法可独立于使用它的客户而变化。角色 抽象策略Strategy具体策略ConcreteStrategy上下文Context 举个例子 需求比如滴滴打车的速度调度策略可以选择调度开快车也可以调度开慢车。
from abc import ABCMeta, abstractmethodclass Strategy(metaclassABCMeta):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()优点 定义了一系列可重复使用的算法和行为消除了一些条件语句可以提供相同行为的不同实现 缺点 客户必须了解不同策略