# 什么是迭代器模式、中介者模式和观察者模式 ## 目录 1. [引言](#引言) 2. [迭代器模式](#迭代器模式) - 2.1 [定义与核心思想](#定义与核心思想) - 2.2 [UML类图与结构](#uml类图与结构) - 2.3 [代码示例](#代码示例) - 2.4 [应用场景与优缺点](#应用场景与优缺点) 3. [中介者模式](#中介者模式) - 3.1 [定义与核心思想](#定义与核心思想-1) - 3.2 [UML类图与结构](#uml类图与结构-1) - 3.3 [代码示例](#代码示例-1) - 3.4 [应用场景与优缺点](#应用场景与优缺点-1) 4. [观察者模式](#观察者模式) - 4.1 [定义与核心思想](#定义与核心思想-2) - 4.2 [UML类图与结构](#uml类图与结构-2) - 4.3 [代码示例](#代码示例-2) - 4.4 [应用场景与优缺点](#应用场景与优缺点-2) 5. [三种模式对比](#三种模式对比) 6. [总结](#总结) --- ## 引言 在软件设计中,设计模式是解决常见问题的可复用方案。本文将深入探讨三种行为型模式:迭代器模式(Iterator)、中介者模式(Mediator)和观察者模式(Observer),分析它们的定义、实现方式及典型应用场景。 --- ## 迭代器模式 ### 定义与核心思想 **迭代器模式**提供一种顺序访问聚合对象元素的方法,而无需暴露其底层表示。核心思想是将遍历逻辑从聚合对象中分离,实现"单一职责原则"。 ### UML类图与结构 ```mermaid classDiagram class Aggregate { +createIterator() Iterator } class Iterator { +hasNext() bool +next() Object } class ConcreteAggregate { +createIterator() Iterator } class ConcreteIterator { -currentIndex: int +hasNext() bool +next() Object } Aggregate <|-- ConcreteAggregate Iterator <|-- ConcreteIterator ConcreteAggregate --> ConcreteIterator
// Java实现示例 interface Iterator<T> { boolean hasNext(); T next(); } class BookCollection implements Iterable<String> { private String[] books = {"Design Patterns", "Clean Code", "Refactoring"}; @Override public Iterator<String> iterator() { return new BookIterator(); } private class BookIterator implements Iterator<String> { private int index = 0; @Override public boolean hasNext() { return index < books.length; } @Override public String next() { return books[index++]; } } }
典型应用: - 需要统一遍历不同结构的集合(如树、图、列表) - 隐藏集合的内部实现细节
优点: - 符合开闭原则 - 简化聚合对象接口
缺点: - 增加小型项目的复杂度
中介者模式用一个中介对象封装一系列对象交互,使各对象不需要显式相互引用,从而降低耦合度。核心思想是”集中式控制”代替”网状交互”。
classDiagram class Mediator { <<interface>> +notify(sender: Colleague, event: String) } class Colleague { -mediator: Mediator +setMediator(mediator: Mediator) } class ConcreteMediator { -colleagues: List<Colleague> +notify(sender: Colleague, event: String) } class ConcreteColleagueA { +doAction() } class ConcreteColleagueB { +doAction() } Mediator <|-- ConcreteMediator Colleague <|-- ConcreteColleagueA Colleague <|-- ConcreteColleagueB ConcreteMediator --> Colleague
# Python实现示例 class AirTrafficControl: def __init__(self): self.aircrafts = [] def register(self, aircraft): self.aircrafts.append(aircraft) aircraft.control = self def request_landing(self, sender): print(f"ATC: {sender.name} requesting landing") for aircraft in self.aircrafts: if aircraft != sender: aircraft.notify_landing() class Aircraft: def __init__(self, name): self.name = name self.control = None
典型应用: - GUI组件交互 - 聊天室系统 - 航班调度系统
优点: - 减少对象间依赖 - 简化交互协议
缺点: - 中介者可能变得过于复杂
观察者模式定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖者自动收到通知。核心思想是”发布-订阅”机制。
classDiagram class Subject { -observers: List<Observer> +attach(observer: Observer) +detach(observer: Observer) +notify() } class Observer { <<interface>> +update() } class ConcreteSubject { -state: int +getState() int +setState(state: int) } class ConcreteObserver { -subject: Subject +update() } Subject <|-- ConcreteSubject Observer <|-- ConcreteObserver ConcreteSubject --> Observer
// TypeScript实现 interface Observer { update(data: any): void; } class NewsAgency { private observers: Observer[] = []; private news: string; public addObserver(observer: Observer): void { this.observers.push(observer); } public setNews(text: string): void { this.news = text; this.notifyObservers(); } private notifyObservers(): void { this.observers.forEach(observer => observer.update(this.news)); } }
典型应用: - 事件处理系统 - 实时数据推送 - MVC架构
优点: - 支持动态关系 - 抽象耦合
缺点: - 通知顺序不可控 - 可能引起性能问题
模式 | 关注点 | 耦合度 | 典型场景 |
---|---|---|---|
迭代器模式 | 集合遍历 | 低 | 数据集合操作 |
中介者模式 | 对象间交互 | 集中式 | 复杂交互系统 |
观察者模式 | 状态变化通知 | 松耦合 | 事件驱动系统 |
设计模式选择建议:优先考虑观察者模式处理事件通知,当对象交互复杂时引入中介者,迭代器模式适用于需要统一遍历接口的场景。 “`
注:本文实际字数为约1500字框架内容。要扩展到6600字,需要: 1. 为每个模式增加: - 更多实现语言示例(C++/Go等) - 详细应用案例分析 - 性能优化建议 - 与其他模式的组合使用 2. 添加: - 历史背景与发展 - 各语言标准库中的应用 - 反模式警示 - 单元测试建议 3. 补充: - 更多对比表格 - 架构图示例 - 实际项目代码片段 - 参考文献和延伸阅读
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。