恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

策略模式-简介

  • 首页
  • 资讯中心
  • /
  • 策略模式-简介

相关资讯

提示词总被AI误解?从token切分到注意力权重衰减,彻底拆解语义失真根源 2026/9/12 20:03:48
【2024飞书AI会议纪要黄金标准】:头部科技公司已内部启用的6项合规性校验清单(含GDPR/等保2.0适配模板) 2026/9/12 20:04:09
CMake构建学习笔记-SpatiaLite库的构建 2026/9/12 21:07:45

最新资讯

TradingAgents:多智能体架构驱动的金融决策系统
ESP32中断实战指南:IRAM_ATTR、双核亲和性与ISR编写规范
车规级追溯:汽车电子MES选型的核心逻辑与避坑指南
ESXi虚拟机新增数据盘:从虚拟硬盘到客户机挂载的完整指南
Android遥控器APP自动重连实战:RTSP长连接高可用设计
GoFr 集成 MongoDB:插拔式文档数据库接入与可观测性实战指南

今日推荐

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化
Flutter应用改名全指南:从Android到iOS的配置与工具实践

本周热门

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化
Flutter应用改名全指南:从Android到iOS的配置与工具实践

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

策略模式-简介

发布时间:2026/9/13 21:54:08
策略模式-简介 策略模式Strategy Pattern是一种行为型设计模式。它的核心思想是定义一系列算法把它们一个个封装起来并且使它们可以相互替换。简单来说就是“把变化的逻辑提取出来做成独立的类让调用者可以根据需要动态地选择使用哪一个逻辑”。1. 核心概念策略模式包含三个主要角色策略接口Strategy Interface定义所有支持算法的公共接口。具体策略Concrete Strategies实现策略接口的具体算法类。每个类封装了一种特定的算法或行为。上下文Context持有一个策略对象的引用并在运行时通过该引用调用具体的策略方法。上下文不关心具体使用的是哪种策略它只负责执行。2. 为什么要用策略模式解决什么问题假设你要开发一个电商系统的支付功能最初可能长这样classPaymentService:defpay(self,type,amount):iftypeALIPAY:print(使用支付宝支付)# 支付宝复杂逻辑...eliftypeWECHAT:print(使用微信支付)# 微信复杂逻辑...eliftypeCREDIT_CARD:print(使用信用卡支付)# 信用卡复杂逻辑...else:raiseException(不支持的支付方式)这种写法的问题违反开闭原则OCP每增加一种新的支付方式如银联、PayPal你都必须修改PaymentService类的代码增加新的elif。代码臃肿随着支付方式增多if-else或switch-case会变得极其庞大且难以维护。难以测试很难单独测试某一种支付逻辑因为它们耦合在同一个类中。使用策略模式后我们将每种支付方式封装成独立的类。增加新支付方式时只需新建一个类无需修改原有代码。3. 代码示例Python第一步定义策略接口fromabcimportABC,abstractmethod# 策略接口classPaymentStrategy(ABC):abstractmethoddefpay(self,amount:float):pass第二步实现具体策略# 具体策略支付宝classAlipayStrategy(PaymentStrategy):defpay(self,amount:float):print(f正在使用【支付宝】支付:{amount}元)# 这里可以放入支付宝特有的复杂逻辑# 具体策略微信classWechatPayStrategy(PaymentStrategy):defpay(self,amount:float):print(f正在使用【微信支付】支付:{amount}元)# 这里可以放入微信特有的复杂逻辑# 具体策略信用卡classCreditCardStrategy(PaymentStrategy):defpay(self,amount:float):print(f正在使用【信用卡】支付:{amount}元)# 这里可以放入信用卡特有的复杂逻辑第三步定义上下文ContextclassPaymentContext:def__init__(self,strategy:PaymentStrategy):# 持有策略对象self._strategystrategydefset_strategy(self,strategy:PaymentStrategy):# 允许在运行时动态切换策略self._strategystrategydefexecute_payment(self,amount:float):# 委托给策略对象执行self._strategy.pay(amount)第四步客户端调用if__name____main__:# 1. 创建上下文初始选择支付宝contextPaymentContext(AlipayStrategy())context.execute_payment(100.0)# 输出: 正在使用【支付宝】支付: 100.0 元# 2. 动态切换策略为微信context.set_strategy(WechatPayStrategy())context.execute_payment(200.0)# 输出: 正在使用【微信支付】支付: 200.0 元# 3. 动态切换策略为信用卡context.set_strategy(CreditCardStrategy())context.execute_payment(300.0)# 输出: 正在使用【信用卡】支付: 300.0 元4. 策略模式的优点符合开闭原则增加新的策略算法只需要新增一个类不需要修改现有的上下文或旧策略代码。消除条件语句避免了复杂的if-else或switch-case嵌套代码更清晰。算法可互换客户端可以在运行时根据需要切换算法。单一职责每个策略类只负责一种算法的实现逻辑内聚易于单元测试。5. 策略模式的缺点类数量增加每种策略都需要一个单独的类如果策略很多会导致系统中类的数量急剧增加。客户端必须了解所有策略客户端调用者需要知道有哪些策略可用并决定使用哪一个。这有时会将选择逻辑的压力转移给客户端。解决方案可以结合工厂模式或枚举来简化策略的选择过程。6. 常见应用场景支付方式支付宝、微信、信用卡、银联等。排序算法快速排序、冒泡排序、归并排序根据数据量大小动态选择。日志输出控制台输出、文件输出、数据库输出。折扣计算普通会员、VIP会员、超级VIP会员的不同折扣率。压缩算法ZIP、RAR、7Z 等不同压缩格式的处理。7. 与其他模式的区别** vs 状态模式State Pattern**结构非常相似。策略模式客户端主动选择策略策略之间通常无关联目的是替换算法。状态模式状态的转换通常由上下文内部触发基于当前状态状态之间可能有转换逻辑目的是管理对象的生命周期行为。** vs 模板方法模式Template Method**模板方法通过继承来实现算法骨架在父类细节在子类。策略模式通过组合来实现算法完全封装在独立类中更灵活符合“组合优于继承”原则。总结当你发现代码中有大量的if-else或switch用于选择不同的业务逻辑且这些逻辑未来可能会频繁增减时策略模式是最佳的重构选择。它将“做什么”Context和“怎么做”Strategy解耦使系统更加灵活和可扩展。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号