【迭代器设计模式详解】C/Java/JS/Go/Python/TS不同语言实现 您所在的位置:网站首页 java迭代器iterator详解 【迭代器设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

【迭代器设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

2023-04-19 16:42| 来源: 网络整理| 查看: 265

简介

迭代器模式(Iterator Pattern),是一种结构型设计模式。给数据对象构建一套按顺序访问集合对象元素的方式,而不需要知道数据对象的底层表示。

迭代器模式是与集合共存的,我们只要实现一个集合,就需要同时提供这个集合的迭代器,就像Java中的Collection,List、Set、Map等,这些集合都有自己的迭代器。假如我们要实现一个这样的新的容器,就可以引入迭代器模式,给我们的容器实现一个迭代器。

 

作用 可以提供多种遍历对象的方式,把元素之间查找调用的责任交给迭代器,而不是聚合对象。 分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。

 

实现步骤 创建迭代器接口,定义hasNext()和next()方法 创建数据容器接口,用来创建迭代器 创建具体数据列表,实现数据容器接口,可以创建迭代器,内含数据列表对象 创建某种数据对象的迭代器,实现hasNext()以及next()方法,并且关联上数据对象列表

 

UML

 

 

Java代码

 

迭代器抽象接口 // Iterator.java 迭代器抽象接口,提供next和hasNext方法 public interface Iterator { public boolean hasNext(); public Object next(); }

 

 

具体迭代器

 

// ObjectIterator.java 对象迭代器,实现了抽象迭代器的方法,聚合了对象列表 public class ObjectIterator implements Iterator { private ObjectList objectList; int index; public ObjectIterator(ObjectList objectList) { this.objectList = objectList; } @Override public boolean hasNext() { if (index current != NULL; } // 获取下一个元素 char *next(struct Iterator *iter, char **value) { if (iter->current == NULL) { return NULL; } *value = iter->current->data; iter->current = iter->current->next; return *value; } // 初始化迭代器 void create_iterator(struct Iterator *iter, struct List *head) { iter->current = head; iter->has_next = &has_next; iter->next = &next; } // 遍历链表 void iterate_list(struct List *head) { struct Iterator iter; char *value; create_iterator(&iter, head); while (iter.has_next(&iter)) { iter.next(&iter, &value); printf("\r\n %s ", value); } printf("\n"); } int main() { printf("test start:\r\n"); // 构造一个链表 struct List *head = (struct List *)malloc(sizeof(struct List)); head->data = "Tom"; head->next = (struct List *)malloc(sizeof(struct List)); head->next->data = "Jerry"; head->next->next = (struct List *)malloc(sizeof(struct List)); head->next->next->data = "Max"; head->next->next->next = NULL; // 使用迭代器遍历链表 iterate_list(head); // 释放链表内存 while (head != NULL) { struct List *temp = head; head = head->next; free(temp); } return 0; }

 

 

更多语言版本

不同语言实现设计模式:https://github.com/microwind/design-pattern



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有