**行为型设计模式**的11种经典模式,它们关注对象之间的通信、职责分配与算法的灵活封装

📅 2026/8/20 23:17:10
**行为型设计模式**的11种经典模式,它们关注对象之间的通信、职责分配与算法的灵活封装
行为型设计模式的11种经典模式它们关注对象之间的通信、职责分配与算法的灵活封装。以下是简要说明观察者Observer定义对象间一对多依赖关系当一个对象状态改变时所有依赖者自动得到通知并更新如事件监听机制。策略Strategy定义一系列可互换的算法将算法封装成独立类使算法变化独立于使用它的客户端。状态State允许对象在其内部状态改变时改变其行为仿佛改变了类本身避免大量条件分支。模板方法Template Method定义算法骨架在父类中用模板方法将某些步骤延迟到子类实现体现“继承复用”。命令Command将请求封装为对象支持请求排队、撤销、重做、日志记录等如GUI按钮操作解耦。迭代器Iterator提供一种顺序访问聚合对象如列表、树元素的方法而不暴露其底层表示。责任链Chain of Responsibility将请求沿处理者链传递每个处理者决定是否处理或转发实现松耦合的请求分发。中介者Mediator用一个中介对象封装一组对象间的交互降低对象间直接依赖如聊天室中的消息路由。备忘录Memento在不破坏封装的前提下捕获并外部保存对象内部状态以便后续恢复如文本编辑器的撤销点。访问者Visitor在不修改类的前提下为一组类的对象添加新操作适用于数据结构稳定但操作频繁变化的场景。解释器Interpreter定义语言的文法并提供解释器来处理该语言中的句子常用于简单DSL、规则引擎等。这些模式共同特点是强调运行时对象间协作方式与行为动态性是GoF 23种设计模式中行为型的核心组成部分。观察者模式Observer Pattern与发布-订阅模式Publish-Subscribe, Pub/Sub核心思想同源松耦合的通知机制但本质存在关键区别它们不是同一模式的不同实现而是不同抽象层级、不同职责边界的两种通信范式。✅共同点思想同源都支持“一对多”的事件通知机制都解耦消息发送方被观察者/发布者与接收方观察者/订阅者目标均为降低对象间直接依赖提升可维护性与可扩展性。❌本质区别维度观察者模式GoF发布-订阅模式系统级/中间件范式通信方式直接调用被观察者持有观察者引用通知时同步、直接调用观察者方法如update()间接通信通过中介Event Bus / Message Broker转发消息发布者与订阅者完全匿名、互不知晓耦合程度仍存在编译时/运行时耦合观察者需实现特定接口被观察者需管理观察者列表彻底解耦双方仅依赖消息主题topic或事件类型无需引用对方甚至可跨进程/语言生命周期管理由被观察者负责注册/注销观察者易引发内存泄漏如未及时removeObserver由消息中间件统一管理订阅关系支持动态订阅/退订、持久化、QoS如至少一次投递适用范围对象级、内存内、同步场景如GUI组件响应模型变更、MVC中的View监听Model系统级、分布式、异步场景如微服务间事件驱动架构、前端状态管理库如Vuex/Pinia的事件总线、Kafka/RabbitMQ典型实现Javajava.util.Observable已弃用、C#INotifyPropertyChanged、SpringApplicationEventPublisher轻量级模拟Redis Pub/Sub、RabbitMQ Exchange/Queue、EventBridge、RxJSSubject模拟、Vue 3 的mitt或tiny-emitter结论发布-订阅是观察者模式在分布式系统、异步通信、中间件抽象下的自然演进与泛化它将“观察者列表”从被观察者内部外移并升级为独立的消息基础设施。因此二者是演进关系而非等价实现——观察者是语言/框架内的设计模式而发布-订阅是一种更通用的架构风格Architectural Style。