java 之 迭代器模式(大话设计模式)
众所周知,java是编程语言中的高级语言,在java的世界里,已经有前辈为我们封装好了各个很好用的框架,工具类等,今天笔者想说的迭代器模式也已经被封装过。
就是我们经常使用的for循环迭代器。或者Iterator,这些都已经是封装好的了。我们经常用,可能会有些读者并不知道这就是迭代器模式。笔者在实际工作中还没有
自己定义一个自己的迭代器去实现自己的业务遍历。先看下类图
大话设计模式-类图

看完类图我们能清晰看到,我们demo需要做的事情,首先定义一个自己的集合,这个集合要能创建一个迭代器。集合接口我们需要有四个方法见类图。
看下笔者的demo
/**
* 迭代器接口
*/
public interface Iterator<T> {
public T first();
public T next();
public Boolean hasNext();
public T current();
}/**
* 集合接口
*/
public interface ICollection<T> {
public Iterator<T> createIterator();
}/**
* 集合 实现类
*/
public class MyCollection<T> implements ICollection<T>{
List<T> list = new ArrayList<T>();
@Override
public Iterator<T> createIterator() {
return new MyIterator<>(list);
}
public void add(T t) {
list.add(t);
}
public void remove(T t) {
list.remove(t);
}
}/**
* 迭代器实现类
*/
public class MyIterator<T> implements Iterator<T> {
private int cursor;
private List<T> list;
public MyIterator(List<T> list){
this.list = list;
}
@Override
public T first() {
cursor = 0;
return list.get(0);
}
@Override
public T next() {
T t = null;
if (hasNext()) {
t = list.get(cursor);
}
cursor ++;
return t;
}
@Override
public Boolean hasNext() {
return cursor < list.size();
}
@Override
public T current() {
return list.get(cursor);
}
}/**
* 客户端
*/
public class Test {
public static void main(String[] args) {
MyCollection<String> myCollection = new MyCollection<>();
myCollection.add("a");
myCollection.add("b");
myCollection.add("c");
myCollection.add("d");
myCollection.add("e");
Iterator<String> iterator = myCollection.createIterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}运行结果如下:
a b c d e
以上是简单的demo,笔者认为,迭代器java已经为我们封装好了。我们理解其运行原理,吸收其设计思想是重点。希望能帮助学习的小伙伴理解迭代器模式。
相关推荐
JnX 2020-09-21
joyjoy0 2020-09-18
Jan 2020-08-17
shenxiuwen 2020-08-01
Andrewjdw 2020-07-26
fanhuasijin 2020-06-21
丽丽 2020-06-08
容数据服务集结号 2020-06-08
czsay 2020-06-01
程序员之怒 2020-04-26
wmsjlihuan 2020-04-26
oDongTianShuiYue 2020-04-26
kong000dao0 2020-04-29
breakpoints 2020-04-20
卷卷萌 2020-04-20
RocNg 2020-04-18
小菜鸟的代码世界 2020-03-27
HongKongPython 2020-03-26