Python

Python设计模式:解释器模式——让代码读懂你的语言你有没有想过,计算器是如何解析并执行1+2*(3-4)这样的表达式的?或者SQL引擎是如何理解SELECT*FROMusersWHEREage>18这样的语句的?这些看似复杂的”语言理解”能力,背后其实都是解释器模式(InterpreterPattern)在支撑。它定义了一种语法表示,并提供一个解释器来处理这种语法。在Python中,解释器模式并不常见,但当你需要解析特定领域的语言(DSL)、配置文件、数学表达式,甚至自定义规则引擎时,它就是一种优雅而强大的选择。今天我们就来深入理解这个”让代码读懂你语言”的设计模式。一、什么是解释器...
阅读全文 →
你有没有用过Git的版本回退?或者游戏的存档/读档功能?这些看似不同的操作,背后其实都是同一个设计思想——备忘录模式(MementoPattern)。想象一下:你正在开发一个文本编辑器,用户希望随时撤销(Undo)操作。如果每次编辑都直接修改原始数据,撤销将变得极其困难。备忘录模式就是解决这类问题的利器——它让你在不破坏封装性的前提下,捕获对象的内部状态,并在之后恢复到这个状态。今天我们就来深入理解这个”时光倒流”的设计模式。一、什么是备忘录模式备忘录模式(MementoPattern)是一种行为型设计模式,它允许在不暴露对象实现细节的情况下,保存和恢复对象的内部状态。为什么需要备忘录模式假设...
阅读全文 →
遍历一个集合,是编程中最常见的操作之一。但如果你需要遍历的不仅仅是列表,而是一棵树、一个文件目录、一段网络流,甚至是一个数据库查询结果呢?迭代器模式(IteratorPattern)就是为此而生——它提供一种方法,让你在不暴露集合内部结构的前提下,逐个访问集合中的元素。在Python中,迭代器不是一个”陌生”的设计模式,而是融入语言血脉的基础设施。for循环的背后、生成器的底层、甚至是文件对象的可迭代性,都是迭代器模式的最佳体现。今天这篇文章,我们将从设计模式的视角,重新认识Python中这个”最熟悉的陌生人”。一、什么是迭代器模式迭代器模式(IteratorPattern)是一种行为型设计模...
阅读全文 →
在复杂系统中,你是否遇到过这样的情况:多个对象之间相互调用类之间互相依赖一个改动影响多个模块典型表现就是:对象之间”网状依赖”,越改越乱。例如一个聊天室系统:user1.send("hello")user2.receive("hello")user3.receive("hello")如果用户之间互相调用:user1.send("hello",user2,user3)问题:每个对象都要知道其他对象耦合非常严重难扩展这正是中介者模式(Mediator)要解决的问题。一、中介者模式解决什么问题?一句话:用一个中介对象封装...
阅读全文 →
在很多业务系统中,你会遇到这样的场景:请求需要经过多个处理步骤每个步骤可能处理,也可能放行处理流程可以动态调整例如:审批流程(组长→经理→总监)Web中间件(鉴权→日志→限流)风控系统(规则1→规则2→规则3)如果你这样写:defhandle(request):ifnotcheck_auth(request):return"无权限"ifnotcheck_rate_limit(request):return"限流"ifnotcheck_risk(request):return"风控拦截"return"通过"问题:所有...
阅读全文 →
在很多系统中,你会遇到这样的需求:把”操作”当成对象传递支持操作的撤销(Undo)支持操作队列/延迟执行支持日志记录与重放例如:编辑器的撤销/重做任务队列(异步执行)按钮点击绑定不同行为审批操作记录如果直接写函数调用:light.turn_on()light.turn_off()看起来简单,但问题是:操作无法记录无法撤销无法统一调度这时候就需要——命令模式(Command)。一、命令模式解决什么问题?一句话:将请求封装为对象,从而使你可以用不同的请求对客户进行参数化。关键词:请求封装解耦调用者与执行者支持撤销/重做支持队列二、核心角色命令模式包含四个角色:1️⃣Command(命令接口)定义执...
阅读全文 →
在很多业务系统中,你一定遇到过这种代码:defhandle(order):iforder.status=="created":...eliforder.status=="paid":...eliforder.status=="shipped":...eliforder.status=="completed":...刚开始还好,但随着业务发展:状态越来越多状态之间有流转规则每个状态逻辑越来越复杂代码会变成:巨型if/else地狱这正是状态...
阅读全文 →
在很多系统中,你会遇到这样的需求:数据变化了,要通知多个模块一个事件发生,需要触发多个动作状态更新后,界面自动刷新例如:订单状态变化→通知用户、更新库存、记录日志配置变更→通知多个服务刷新缓存前端数据变化→自动更新UI如果你这样写:defupdate():notify_user()update_stock()write_log()问题很快就会出现:每增加一个功能,就要改原函数模块之间强耦合代码越来越难维护这正是观察者模式(Observer)要解决的问题。一、观察者模式解决什么问题?一句话:定义对象之间的一对多依赖关系,当一个对象状态发生变化时,所有依赖它的对象都会自动收到通知。关键词:一对多事...
阅读全文 →
在开发中,你是否写过这样的代码:defprocess():step1()step2()step3()然后在另一个地方:defprocess_v2():step1()step2_new()step3()再后来:defprocess_v3():step1()step2_new()step3_new()你会发现:整体流程是固定的只有某些步骤会变化代码开始出现大量重复这正是模板方法模式(TemplateMethod)要解决的问题。一、模板方法模式解决什么问题?一句话:定义一个算法的骨架,将某些步骤延迟到子类中实现。关键词:固定流程可变步骤代码复用控制流程二、一个典型场景:数据处理流程假设我们要实现一个...
阅读全文 →
在开发中,你一定写过这样的代码:ifpay_type=="wechat":...elifpay_type=="alipay":...elifpay_type=="bank":...刚开始还好,但随着业务发展:分支越来越多逻辑越来越复杂修改一个分支可能影响其他逻辑这时候代码就会变得:难维护、难扩展、容易出错。这正是策略模式(Strategy)要解决的问题。一、策略模式解决什么问题?一句话:定义一系列算法(策略),将它们封装起来,并且可以互相替换。关键词:算法封装动态切换避免if...
阅读全文 →
关于作者

程序进阶之路

一线 Java 后端工程师,专注 Spring Cloud 微服务架构与分布式系统实战。近年深耕 AI 工具落地(Claude Code)、Python 设计模式与 MinIO 对象存储。保持每周 2-3 篇高质量技术输出。

公众号二维码

扫码关注公众号