设计模式-19-迭代器模式

简介: 迭代器模式(Iterator Pattern)就是不需要知道集合对象的底层内部逻辑,只通过访问一个方法就可以顺序访问集合对象的各个元素。属于行为型模式。

  迭代器模式(Iterator Pattern)就是不需要知道集合对象的底层内部逻辑,只通过访问一个方法就可以顺序访问集合对象的各个元素。属于行为型模式。

       这玩意我们在日常开发中是一直在使用的,也正因为太常用,Java内部已经提供了这个接口:util包下的Iterator接口,实现这个接口就可以得到一个迭代器。

图片

       那么得到了这个迭代器后,我们怎么用到要遍历的类上呢?这里就又涉及到另外一个接口:lang包下的Iterable接口

image.png

image.png

       上图那句可以看到,Iterator<T> iterator()方法就是要return一个迭代器啦,这两个接口配合使用,我们就可以对我们的类进行迭代来获取类的内部元素啦。

       这里直接看常用的ArrayList就可以,看源码:

ArrayList是Collection的继承类,统一由Collection实现了Iterable接口

image.png

然后来看ArrayList的源码:


       我们要让自定义的类支持迭代怎么实现呢?

1.建一个实现了Iterable的类packagecom.xing.design.iterator;
importjava.util.ArrayList;
importjava.util.Iterator;
importjava.util.List;
/*** 相当于List,可以迭代* @author xing* @createTime*/publicclassMyListimplementsIterable<String>{
privatefinalList<String>strList=newArrayList<>();
publicMyList() {
strList.add("第一个元素");
strList.add("第二个元素");
strList.add("第三个元素");
  }
@OverridepublicIterator<String>iterator() {
returnnewMyIterator();
  }
/***  内部类是一个迭代器哈* @author xing* @createTime*/privateclassMyIteratorimplementsIterator<String> {
intindex=0;
@OverridepublicbooleanhasNext() {
returnindex<strList.size()?true :false;
    }
@OverridepublicStringnext() {
Stringstr=strList.get(index);
index++;
returnstr;
    }
  }
}
2.编写main方法测试packagecom.xing.design.iterator;
importjava.util.Iterator;
publicclassIteratorDemo {
publicstaticvoidmain(String[] args) {
MyListmyList=newMyList();
// 获取我们得到的那个迭代器Iterator<String>iterator=myList.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
    }
for (Stringstr : myList) {
System.out.println(str);
    }
  }
}

3.测试结果

image.png

       完美,就这么简单。。。


总结:

       迭代器模式在Java中很常用,我们使用Collection系列的集合基本上已经能满足大部分情况。如果要自定义类迭代就实现Iterable接口。

       迭代器模式分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。


END

目录
相关文章
|
19天前
|
设计模式 Java Kotlin
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
37 2
|
28天前
|
设计模式 Java Kotlin
Kotlin - 改良设计模式 - 迭代器模式
Kotlin - 改良设计模式 - 迭代器模式
27 0
|
2月前
|
设计模式 Java 开发者
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。对于快速学习Kotlin的用户,推荐查看“简洁”系列教程。本文重点介绍迭代器模式,通过具体示例展示了如何在Kotlin中实现迭代器模式,包括使用Iterator、Iterable接口及重载iterator运算符的方法。
33 4
|
2月前
|
设计模式 Java Kotlin
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
29 2
|
2月前
|
设计模式 Java 开发者
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
本教程详细讲解了Kotlin中的迭代器模式,包括如何通过实现Iterator和Iterable接口以及重载iterator运算符来实现可遍历的自定义集合。示例展示了如何创建一个图书集类,并通过不同方式使其支持遍历操作,适合希望深入了解Kotlin迭代器模式的开发者。
33 3
|
1月前
|
设计模式 Java Kotlin
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
33 0
|
2月前
|
设计模式 Java Kotlin
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
33 1
|
2月前
|
设计模式 Java Kotlin
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
28 1
|
3月前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
5月前
|
存储 NoSQL Go
iLogtail设计模式问题之迭代器模式是如何应用的
iLogtail设计模式问题之迭代器模式是如何应用的