Skip to content

行为型模式

解决“对象间如何交互、职责如何分配”的问题,优化行为协作

策略模式(Strategy):定义一系列算法,将每种算法封装起来并可互相替换,让算法独立于使用它的客户端。

电商的促销折扣计算。定义“折扣策略”接口(含计算折扣的方法),子类实现“满减策略”(满200减50)、“折扣券策略”(9折券)、“会员策略”(8折);下单时根据用户选择的促销方式,动态切换对应的策略计算最终价格。

模板方法模式(Template Method):在父类中定义算法的骨架,将步骤延迟到子类中实现,确保算法结构不变。

框架的 “请求处理流程”。父类定义请求处理的固定骨架(接收请求→验证参数→处理业务→返回响应),其中“处理业务”步骤延迟到子类实现(如用户登录子类处理登录逻辑,订单提交子类处理下单逻辑),确保流程一致性。

观察者模式(Observer):定义对象间的一对多依赖,当一个对象状态变化时,所有依赖它的对象都会自动收到通知并更新。

社交媒体的 “关注-推送”功能。博主(被观察者)有多个粉丝(观察者),当博主发布新文章时,系统自动通知所有粉丝(推送消息),粉丝无需主动刷新页面,实现“状态变化→自动通知”。

迭代器模式(Iterator):提供一种方法遍历聚合对象中的元素,无需暴露聚合对象的内部结构。

Java中的ArrayList迭代器。客户端遍历ArrayList时,无需知道其内部是数组实现,只需通过iterator()获取迭代器,调用next()“逐个取元素”、hasNext()“判断是否有下一个”,屏蔽内部结构细节。

责任链模式(Chain of Responsibility):将请求的发送者与接收者解耦,让多个对象依次处理请求,直到有对象处理它。

公司的 “报销审批流程”。报销单(请求)依次经过“部门经理”(审批≤1000元)→“财务主管”(审批≤5000元)→“总经理”(审批>5000元),每个节点判断是否能处理,不能则传递给下一个节点,直到审批完成。

命令模式(Command):将请求封装成对象,使请求能被存储、传递、撤销或重做(如“撤销操作”功能)。

文本编辑器的 “撤销/重做”功能。用户的“插入文字”“删除文字”操作被封装成“命令对象”,存储在命令队列中;点击“撤销”时,执行命令对象的undo()方法,点击“重做”时执行redo()方法,实现操作的可逆性。

备忘录模式(Memento):在不破坏封装的前提下,捕获对象的内部状态并存储,以便后续恢复该状态(如“存档/读档”)。

游戏的 “存档/读档”功能。玩家(发起人)在关键节点(如通关BOSS前)保存游戏状态(角色血量、道具、地图位置)到“存档对象”(备忘录),存储在“存档管理器”中;后续读档时,从管理器取出存档,恢复到之前的游戏状态。

状态模式(State):让对象在内部状态变化时改变行为,使对象看起来像修改了类(如“订单状态:待支付→已支付→已发货”)。

外卖订单的状态流转。订单(上下文)有“待支付”“已支付”“配送中”“已完成”“已取消”等状态(状态对象);当用户支付后,订单状态从“待支付”切换到“已支付”,同时自动触发“通知商家备货”的行为,状态变化带动行为变化。

访问者模式(Visitor):定义一个作用于对象结构中各元素的操作,在不改变元素类的前提下,新增对元素的操作。

报表系统的 “数据统计”功能。系统中有“订单数据”“用户数据”“商品数据”等元素(元素对象),定义“销售额统计访问者”“用户增长统计访问者”;当需要新增“复购率统计”时,只需新增一个访问者类,无需修改原有数据元素类。

中介者模式(Mediator):用一个中介对象封装对象间的交互,减少对象间的直接耦合,让交互集中管理。

机场的 “空中交通管制中心”。多架飞机(同事对象)之间不能直接沟通飞行路线(避免耦合),而是通过管制中心(中介者)协调:中介者接收每架飞机的位置信息,统一分配航线,防止碰撞,集中管理交互。

解释器模式(Interpreter):定义语言的语法规则,并构建一个解释器来解释该语言中的句子(如简单表达式解析、规则引擎)。

Excel的 “公式计算”功能。用户输入“=A1+B12”(句子),系统定义语法规则(如“表达式=单元格+运算符+表达式”“运算符包括+、-、、/”),构建解释器解析公式,先计算乘法“B1*2”,再计算加法“A1+结果”,最终得到单元格值。

Released under the MIT License.