python 策略模式

内容: 定义一系列算法,把他们一个个封装起来,并且使它们可相互替换,本模式使得算法可独立于使用它的客户而变化

角色

  1. 抽象策略(Strategy)
  2. 具体策略(ConcreteStrategy)
  3. 上下文(Context)
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)

#在封装一层,把所有的数据和策略通过上下文类传进去  #不需要用户知道的数据都可以封装Context里
class Context:
        def __init__(self,strategy,data):
                self.data = data
                self.date = datetime.now()
                self.strategy = strategy

        #切换策略
        def set_strategy(self,strategy):
                self.strategy = strategy

        #执行策略 
        def 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()

在这里插入图片描述

优点

  1. 定义了一系列可重用的算法和行为
  2. 消除了一些条件语句
  3. 可以提供相同行为的不同实现

缺点

  1. 客户必须了解不同的策略
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟伟哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值