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

设计模式中的行为模式

行为型设计模式主要关注对象间的职责分配和算法抽象,以下是11种经典行为模式及其典型应用场景的详细解析:

1. 责任链模式(Chain of Responsibility)
核心思想:将请求沿处理链传递,直到有对象处理它

应用场景:

多级审批系统(如费用报销流程)

事件冒泡机制(浏览器DOM事件)

日志过滤器链(Log4j的Appender过滤)

典型案例:

public interface Handler {void setNext(Handler h);boolean handle(Request req);
}
// 构建链:spamHandler -> fanHandler -> complaintHandler

2. 命令模式(Command)
核心思想:将请求封装为独立对象,支持撤销/重做

应用场景:

图形编辑器撤销栈(Photoshop历史记录)

智能家居遥控器(同一按钮绑定不同设备)

事务型系统(数据库回滚操作)

实现要点:

class Command:def execute(self): passdef undo(self): passclass LightOnCommand(Command):def __init__(self, light):self._light = lightdef execute(self):self._light.turn_on()

3. 解释器模式(Interpreter)
核心思想:定义语言的文法表示,并解释执行

应用场景:

正则表达式引擎

SQL语法解析(MySQL的WHERE子句处理)

金融规则引

4. 迭代器模式(Iterator)

  • 核心思想:提供统一的集合遍历接口

  • 应用场景

    • 数据库查询结果集遍历(JDBC ResultSet)

    • 树形结构遍历(文件系统目录导航)

    • 自定义集合类(C++ STL迭代器实现)

  • 现代演进

// ES6迭代器协议
const myIterable = {[Symbol.iterator]() {let step = 0;return {next() {return step <= 3 ? {value: step++, done: false} : {done: true};}};}
};

5. 中介者模式(Mediator)
核心思想:通过中介对象集中管理对象间交互

应用场景:

航空管制系统(协调多架飞机起降)

GUI组件通信(Qt的信号槽机制)

微服务编排(Kubernetes Pod调度)

优势对比:

直接通信    中介者模式
N*(N-1)连接复杂度    线性复杂度
对象强耦合    对象仅依赖中介
6. 备忘录模式(Memento)
核心思想:捕获对象内部状态并在需要时恢复

应用场景:

游戏存档系统(保存角色状态)

文本编辑器撤销操作(VSCode的CTRL+Z)

虚拟机快照(VMware snapshot)

实现注意:

// 严格封装备忘录
class Originator {private string _state;public Memento Save() => new Memento(_state);internal void Restore(Memento m) => _state = m.GetState();
}// 备忘录类不公开构造函数
public sealed class Memento {private readonly string _state;internal Memento(string s) => _state = s;internal string GetState() => _state;
}

7. 观察者模式(Observer)
核心思想:定义对象间的一对多依赖关系

应用场景:

股票价格变动通知(Bloomberg终端)

React/Vue响应式数据绑定

传感器数据监控(IoT设备群)

现代实现:

// RxJS观察者模式变体
const stockTicker$ = new Subject<number>();
stockTicker$.subscribe(price => {console.log(`当前股价: ${price}`);
});
stockTicker$.next(156.78);

8. 状态模式(State)
核心思想:将对象行为委托给状态对象

应用场景:

电梯控制系统(运行/停止/维护状态)

TCP连接状态机(SYN_SENT/ESTABLISHED)

游戏AI角色行为(巡逻/追击/逃跑)

模式优化:

// 使用状态机生成器避免条件分支
type State interface {Handle(ctx *Context)
}type Context struct {state State
}
func (c *Context) Request() {c.state.Handle(c)
}

9. 策略模式(Strategy)
核心思想:定义算法族并使其可互换

应用场景:

支付方式选择(支付宝/微信/信用卡)

导航路径计算(最短路径/最少收费)

数据压缩算法(ZIP/LZ77/Snappy)

Lambda演进:

// 传统实现
interface SortStrategy {void sort(List<?> items);
}// Java8+函数式表达
Collections.sort(list, (a,b) -> b.compareTo(a));

10. 模板方法模式(Template Method)
核心思想:定义算法骨架,允许子步骤重写

应用场景:

自动化测试框架(setUp/test/tearDown)

银行交易流程(验证/执行/记录)

编译器设计(词法分析→语法分析→代码生成)

钩子方法:

class DatabaseTemplate:def connect(self): raise NotImplementedErrordef query(self): pass  # 默认实现def close(self): print("Default close")def execute(self):  # 模板方法self.connect()self.query()self.close()

11. 访问者模式(Visitor)
核心思想:将操作与对象结构分离

应用场景:

编译器AST遍历(类型检查/代码优化)

文档格式转换(Markdown→HTML/PDF)

医疗影像处理(CT/MRI不同分析算法)

双重分发:

class Element {
public:virtual void accept(Visitor& v) = 0;
};class Visitor {
public:void visit(ElementA& e);void visit(ElementB& e);
};

行为模式选择矩阵
问题特征    推荐模式
需要撤销/重做操作    命令模式
对象状态决定行为    状态模式
跨组件通信复杂    中介者模式
多种算法灵活切换    策略模式
遍历异构集合    迭代器模式
解耦事件发布订阅    观察者模式
行为模式通过将行为抽象化和通信规范化,有效解决了面向对象设计中高频出现的职责分配问题。现代框架如Spring、React等大量融合这些模式思想,理解其本质比记忆实现更重要。

http://www.xdnf.cn/news/17193.html

相关文章:

  • 【Unity输入系统】自定义与双击不冲突的单击Interaction
  • 零基础-动手学深度学习-9.3. 深度循环神经网络
  • 深度学习(2):自动微分
  • 数据结构——栈、队列
  • STM32——STM32CubeMX
  • Keil MDK-ARM V5.42a 完整安装教程
  • Git Status 命令深度指南:洞悉仓库状态的核心艺术
  • 【YOLOv8改进 - C2f融合】C2f融合SFS-Conv(空间 - 频率选择卷积)提升特征多样性,同时减少参数和计算量
  • cuda编程笔记(13)--使用CUB库实现基本功能
  • 一个自动定位并查询天气的工具(c语言)
  • Liberica JDK 和普通JDK(如Oracle JDK、OpenJDK等)的差异
  • 经营帮:重构企业经营全流程,打造产业互联网新生态
  • Spring IoC 容器核心流程(面试必懂)
  • QT项目 -仿QQ音乐的音乐播放器(第五节)
  • 光伏电站巡检的智能化转型
  • 《算法导论》第 10 章 - 基本数据结构
  • Spark Memory 内存设计的核心组件、对比Flink内存配置
  • Moses工具的配置和小语种平行语料训练SMT完整实现
  • iptables封堵实验
  • NFS 服务器
  • 贪心+矩阵算法
  • Go语言Ebiten坦克大战
  • mysql 索引失效分析
  • 【数据结构】二叉树练习
  • 从BaseMapper到LambdaWrapper:MyBatis-Plus的封神之路
  • 【Unity3D实例-功能-镜头】第三人称视觉-镜头优化
  • Oracle 12c + Pl/Sql windows系统下表空间创建、迁移,dmp备份导入,数据库字符集更改
  • Oracle exp imp expdp impdp 命令详解
  • 如何快速开发符合Matter标准的智能家居设备?
  • 一个程序通过 HTTP 协议调用天气 API,解析 JSON 格式的天气数据,提取关键信息并格式化输出:日期、天气状况、温度范围、风向、湿度等核心气象数据。