前言

策略模式属于行为型模式,假设使用高德地图导航,会为客户规划不同的路线,让客户选择。

一、策略模式

1.概念

定义一些列的算法,把这些算法一个个封装起来,并且使他们可以相互替换。

本模式使得算法可以独立于使用算法的客户而变化。

2.角色

抽象策略(Strategy)

具体策略(ConcreteStrategy)

上下文(Context)

3.优点

定义了一系列可重用的算法和行为

消除了一些if条件语句

可以提供相同行为的不同实现

4.缺点

因为切换策略是在高层代码完成的,所以客户端需要十分明确不同的策略。

5.代码

from abc import ABC, abstractmethod


# 抽象策略接口:使得各个具体策略表现一致
class Strategy(ABC):
    @abstractmethod
    def do(self, data):
        pass


# 具体策略:封装算法和数据,不对高层代码开放
class FastStrategy(Strategy):
    def do(self, data):
        print("走高速,用时较快,需缴纳过路费")


# 具体策略:封装算法和数据,不对高层代码开放
class SlowStrategy(Strategy):
    def do(self, data):
        print("路程较远,用时较慢,无需缴纳过路费")


# Context上下文类:负责导航策略的动态切换
class Context(object):
    def __init__(self, strategy, data):
        self.strategy = strategy
        self.data = data

    def set_strategy(self, strategy):
        self.strategy = strategy

    def do_strategy(self):
        self.strategy.do(self.data)


# 高层代码(Client)
if __name__ == '__main__':
    data = 350
    fast_strategy = FastStrategy()
    context = Context(fast_strategy, data)
    context.do_strategy()
    slow_strategy = SlowStrategy()
    context.set_strategy(slow_strategy)
    context.do_strategy()

 

参考

posted on 2024-02-17 21:04  Martin8866  阅读(5)  评论(0编辑  收藏  举报