设计模式

迭代器模式(Iterator)

2020-04-21  本文已影响0人  剑道_7ffc

一句话总结

容器和集合访问

内容

提供一种顺序访问集合或容器的接口,无须暴露内部结构;本质是将抽离集合对象到迭代器,提供一致访问接口。

场景

寄件迭代分发;刷卡支付;

类图

image.png

代码示例

//抽象迭代器
public interface Iterator<E> {
    E next();
    boolean hasNext();
}
//具体迭代器
public class ConcreteIterator<E> implements Iterator<E> {
    private List<E> list;
    private int cursor = 0;
    public ConcreteIterator(List<E> list) {
        this.list = list;
    }
    public E next() {
        return this.list.get(this.cursor ++);
    }
    public boolean hasNext() {
        return this.cursor < this.list.size();
    }
}
//抽象容器
public interface IAggregate<E> {
    boolean add(E element);
    boolean remove(E element);
    Iterator<E> iterator();
}
//具体容器
public class ConcreteAggregate<E> implements IAggregate<E> {
    private List<E> list = new ArrayList<E>();
    public boolean add(E element) {
        return this.list.add(element);
    }
    public boolean remove(E element) {
        return this.list.remove(element);
    }
    public Iterator<E> iterator() {
        return new ConcreteIterator<E>(this.list);
    }
}
public class Test {
    public static void main(String[] args) {
        //来一个容器对象
        IAggregate<String> aggregate = new ConcreteAggregate<String>();
        //添加元素
        aggregate.add("one");
        aggregate.add("two");
        aggregate.add("three");
        //获取容器对象迭代器
        Iterator<String> iterator = aggregate.iterator();
        //遍历
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.println(element);
        }

    }
}

运行结果


image.png
上一篇 下一篇

猜你喜欢

热点阅读