迭代器模式

简介: 迭代器模式是一种行为型设计模式,提供统一接口遍历集合元素,无需暴露内部结构。它分离了集合的实现与遍历逻辑,支持多种遍历方式,提升封装性与可维护性,适用于需统一访问不同集合的场景。

迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种方法顺序访问一个集合对象中的元素,而无需暴露集合对象的内部表示。迭代器模式允许客户端通过统一的接口遍历不同类型的集合,保持了集合的封装性,并且支持多种遍历方式。

  1. 迭代器模式的结构
    迭代器模式通常包括以下几个角色:

迭代器(Iterator):定义访问和遍历集合元素的方法。
具体迭代器(ConcreteIterator):实现迭代器接口,维护对集合元素的遍历状态。
聚合(Aggregate):定义创建迭代器的接口。
具体聚合(ConcreteAggregate):实现聚合接口,返回一个具体的迭代器。

  1. 迭代器模式的 UML 图
    plaintext
    +------------------+ +--------------------+
    | Iterator |<>--------| ConcreteIterator |
    +------------------+ +--------------------+
    | + first() | | + first() |
    | + next() | | + next() |
    | + is_done() | | + is_done() |
    | + current_item() | | + current_item() |
    +------------------+ +--------------------+
                               ^
                               |
                         +--------------------+
                         |     Aggregate      |
                         +--------------------+
                         | + create_iterator()|
                         +--------------------+
                               ^
                               |
                         +--------------------+
                         |  ConcreteAggregate  |
                         +--------------------+
                         | + create_iterator() |
                         +--------------------+
    
  2. 迭代器模式的实现
    以下是一个 Python 中迭代器模式的简单示例:

3.1 定义迭代器接口
python
from abc import ABC, abstractmethod

class Iterator(ABC):
@abstractmethod
def first(self):
pass

@abstractmethod
def next(self):
    pass

@abstractmethod
def is_done(self):
    pass

@abstractmethod
def current_item(self):
    pass

3.2 定义聚合接口
python
class Aggregate(ABC):
@abstractmethod
def create_iterator(self) -> Iterator:
pass
3.3 实现具体迭代器
python
class ConcreteIterator(Iterator):
def init(self, aggregate):
self._aggregate = aggregate
self._index = 0

def first(self):
    self._index = 0

def next(self):
    self._index += 1

def is_done(self):
    return self._index >= len(self._aggregate.items)

def current_item(self):
    return self._aggregate.items[self._index]

3.4 实现具体聚合
python
class ConcreteAggregate(Aggregate):
def init(self):
self.items = []

def add_item(self, item):
    self.items.append(item)

def create_iterator(self) -> Iterator:
    return ConcreteIterator(self)

3.5 使用迭代器模式
python
if name == "main":
aggregate = ConcreteAggregate()
aggregate.add_item("Item 1")
aggregate.add_item("Item 2")
aggregate.add_item("Item 3")

iterator = aggregate.create_iterator()

print("Iterating through the collection:")
while not iterator.is_done():
    print(iterator.current_item())
    iterator.next()
  1. 迭代器模式的优缺点
    优点
    封装性:通过迭代器隐藏了集合的内部结构,客户端不需要了解集合的具体实现。
    一致性:可以为不同类型的集合提供统一的遍历接口,使用体验一致。
    支持多种遍历方式:可以根据需要实现不同类型的迭代器,支持不同的遍历策略。
    缺点
    增加了复杂性:引入了多个类和接口,可能导致代码复杂度提高。
    可能导致性能问题:在某些情况下,迭代器的实现可能会影响性能,尤其是在处理大型数据集时。
  2. 何时使用迭代器模式
    当需要访问一个集合的元素,而又不希望暴露其内部结构时。
    当希望提供一种统一的遍历方式,以便对不同类型的集合进行操作时。
    当想要在不同的遍历策略之间切换时。
  3. 总结
    迭代器模式是一种常用的设计模式,通过提供一个统一的接口来遍历不同类型的集合,使得代码更加灵活和可维护。它不仅提高了代码的封装性,还使得各种集合的操作变得更加一致。在实际开发中,迭代器模式广泛应用于数据结构的实现、集合类库等场景。合理使用迭代器模式,可以提升程序的可读性和可扩展性。
相关文章
|
2月前
|
缓存 JSON JavaScript
TypeScript 快速上手指南
TypeScript是JavaScript的超集,支持静态类型,提升代码质量与可维护性。本文涵盖环境搭建、核心语法、实战示例及工程化配置,零基础也能快速上手,适合Vue3、React等大型项目开发。
|
2月前
|
存储 JSON JavaScript
JSON 快速上手指南
JSON是一种轻量级数据交换格式,语法严格,键名需双引号、值类型有限,支持跨语言解析。本文详解其语法规则、与JS对象区别、序列化/解析方法(stringify/parse)、实战应用及常见避坑技巧,助你快速掌握JSON核心技能。
|
2月前
|
存储 关系型数据库 MySQL
B+ 树索引
B+树是MySQL InnoDB引擎的核心索引结构,具自平衡、有序存储特性,支持高效查找、插入、删除。所有数据存于叶子节点,且叶节点相连,利于范围查询。广泛用于读密集、排序及范围检索场景,显著降低磁盘I/O,提升查询性能,是数据库优化的关键技术。
|
2月前
|
自然语言处理 关系型数据库 MySQL
MySQL 全文索引
MySQL全文索引支持对CHAR、VARCHAR、TEXT字段进行高效文本搜索,适用于文章、评论等长文本。通过MATCH()与AGAINST()实现自然语言或布尔模式查询,支持分词、停用词过滤和最小词长设置。可创建于建表时或后期添加,适用于搜索引擎、CMS、电商等场景,提升关键词检索效率,但需权衡增删改开销与索引维护成本。(238字)
|
2月前
|
JavaScript 前端开发 API
Vue.js 快速上手指南
Vue.js 是轻量级渐进式前端框架,核心聚焦视图层,上手简单、生态丰富。本文提供可直接复制的快速入门指南,涵盖 Vue3 组合式 API、响应式数据、指令、组件化、生命周期及 Axios 异步请求等实战内容,附完整示例与避坑提示,零基础也能快速搭建交互式页面,助力高效开发。
|
2月前
|
JavaScript 前端开发 API
Vue3 从入门到实战
Vue3 从入门到实战,涵盖组合式 API、响应式数据、组件化开发与生命周期等核心内容。提供可直接运行的代码示例,零基础快速上手,助力高效构建现代化前端应用。
|
2月前
|
缓存 JavaScript 前端开发
jQuery 快速上手指南
jQuery是全球最流行的JavaScript库,以“写更少代码,做更多事”为核心,封装原生JS复杂操作,兼容主流浏览器。本指南含快速引入、核心语法、常用功能与实战示例,支持直接复制粘贴至博客,零基础也能快速上手,涵盖选择器、DOM操作、事件、动画、AJAX及性能优化技巧,助力高效开发前端交互页面。
|
2月前
|
JavaScript 前端开发 Java
Bootstrap5 快速上手指南
Bootstrap5 快速上手指南:告别 jQuery,拥抱原生 JS!新增 xxL 断点与 RTL 支持,优化栅格系统与组件样式。提供 CDN 引入、核心布局、常用组件及完整博客实例,零基础也能快速搭建美观响应式博客,含按钮、卡片、导航栏、表单等实战代码,即拷即用。
Bootstrap5 快速上手指南
|
2月前
|
缓存 NoSQL Java
地方特产商城 Spring Boot 后端项目
基于Spring Boot 3.5.6的地方特产商城后端,集成MyBatis、Redis与MySQL,支持店铺管理、用户认证及评价功能。采用RESTful架构,统一响应封装,具备缓存优化与自定义异常处理,代码规范清晰,易于扩展。
|
2月前
|
JSON JavaScript 前端开发
Node.js 快速上手指南
Node.js 是基于 Chrome V8 引擎的 JavaScript 运行时,让 JS 脱离浏览器运行在服务端。支持异步 I/O、跨平台,适用于构建后端 API、CLI 工具与全栈应用。本指南涵盖安装、核心模块(fs、http、path、events)、NPM 包管理、Express 实战及文件上传示例,零基础也能快速上手,掌握 Node.js 核心开发技能。