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已经为我们封装好了。我们理解其运行原理,吸收其设计思想是重点。希望能帮助学习的小伙伴理解迭代器模式。