前言
策略模式属于行为型模式,假设使用高德地图导航,会为客户规划不同的路线,让客户选择。
一、策略模式
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()
参考