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

原文地址:https://www.cnblogs.com/zhuxiansheng/p/8037973.html