前言
策略模式属于行为型模式,假设使用高德地图导航,会为客户规划不同的路线,让客户选择。
一、策略模式
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()
参考
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南