当前位置: 首页 > news >正文

Python 重构“策略”模式:用函数简化设计模式的实践

在软件设计中,设计模式是解决问题的通用模板。但随着编程语言特性的发展,某些经典模式可以通过更简洁的方式实现。本文以电商促销折扣场景为例,演示如何通过函数重构“策略”模式,减少代码量并提升可维护性。

经典策略模式实现

  • 核心概念
    上下文(Context):订单(Order)类,负责计算总价和应用折扣。
  • 策略接口(Strategy):
    抽象类Promotion,定义discount方法。
  • 具体策略(Concrete Strategies):
    三个子类分别实现不同折扣规则。
class Promotion(ABC):@abstractmethod def discount(self, order):"""返回折扣金额(正值)"""class FidelityPromo(Promotion):def discount(self, order):return order.total()  * .05 if order.customer.fidelity  >= 1000 else 0 
  • 实现特点
    每个策略类仅包含一个方法,且无状态。
    需手动实例化策略对象并传递给订单。

函数重构策略模式

  • 核心思想
    将策略类转换为函数,利用Python的一等函数特性简化代码:
def fidelity_promo(order):return order.total()  * .05 if order.customer.fidelity  >= 1000 else 0 def bulk_item_promo(order):discount = 0 for item in order.cart: if item.quantity  >= 20:discount += item.total()  * .1return discount 

优势对比

经典模式函数重构
需定义抽象类和多个子类直接使用函数
每次使用需实例化对象函数即用即调
代码行数:40+行代码行数:28行

动态选择最佳策略

简单实现

通过遍历函数列表计算最大折扣:

promos = [fidelity_promo, bulk_item_promo, large_order_promo]
def best_promo(order):return max(promo(order) for promo in promos)

动态收集策略

利用模块内省自动发现所有策略函数:

from inspect import isfunction 
promos = [func for name, func in getmembers(promotions, isfunction) if name.endswith('_promo')  and name != 'best_promo']

重构总结

维度经典模式函数重构
代码量较多显著减少
可维护性需管理类继承关系函数即策略,直观清晰
扩展性新策略需新增类新函数自动纳入

适用场景:当策略无状态且仅需单次计算时,函数重构能大幅提升开发效率。若需维护策略状态,则仍需使用类实现。


通过这一重构实践,我们不仅减少了代码冗余,还充分利用了Python的函数特性,展现了设计模式与语言特性的结合之美。

相关文章:

  • 【图片识别改名】批量读取图片区域文字识别后批量改名,基于Python和腾讯云的实现方案
  • 1.5 点云数据获取方式——双目立体相机
  • Uniapp:设置页面下拉刷新
  • 服务器远程超出最大连接数的解决方案是什么?
  • 基于C++的IOT网关和平台1:github项目ctGateway
  • 基于DrissionPage的实习信息爬虫改造与解析
  • nginx配置集群服务器中的tcp负载均衡器
  • 中国飞机迎来历史性窗口,航空装备研制不断突破,智能化升级成为核心驱动力
  • nginx核心功能
  • 微服务开发中的应用生命周期管理
  • Javscript 字符串的常用方法有哪些?
  • k8s 学习记录 (六)_Pod 污点和容忍性详解
  • 20250429 垂直地表发射激光测量偏转可以验证相对性原理吗
  • Lua 第14部分 数据结构
  • 【论文阅读】PEEKABOO: Interactive Video Generation via Masked-Diffusion
  • Educational Codeforces Round 178 (Rated for Div. 2)
  • 在yolo中Ultralytics是什么意思呢?超越分析的智能
  • 【专题五】位运算(1):常见位运算操作总结
  • 【Java学习】Java的CGLIB动态代理:通俗解释与使用指南
  • 短视频矩阵批量剪辑与场景剪辑功能 OEM 定制开发
  • 幸福航空取消“五一”前航班,财务人员透露“没钱飞了”
  • 商务部:入境消费增长潜力巨大,离境退税有助降低境外旅客购物成本
  • 体坛联播|巴萨“三杀”皇马夺国王杯,陈妤颉破亚洲少年纪录
  • 蚂蚁集团将向全体股东分红
  • 国家市场监管总局:组织销毁侵权假冒服装、食药等3300吨
  • 牛市早报|商务部:目前中美之间未进行任何经贸谈判