设计模式之迭代器模式

设计模式之迭代器模式

迭代器模式为统一遍历提供了接口,通过返回的迭代器,可以遍历容器内部的节点。

在迭代器模式中有几种角色

集合类接口 Aggregate,迭代接口,具体的集合类对象,具体的迭代器

UML图如下

Aggregate接口如下:

package 二十三种设计模式.迭代器模式;

import java.util.Iterator;

/**
 * @author lc
 * @date 2020-12-18 19:00
 */
public interface Aggregate<E> {
    /**
     * 统一返回迭代器接口
     *
     * @return 迭代器
     */
    Iterator<E> iterator();
}

ConcreteAggregate如下

public class ListT1<E> implements Aggregate<E> {
    List<E> list = new ArrayList<>();

    public ListT1(List<E> list) {
        this.list = list;
    }

    @Override
    public Iterator<E> iterator() {
        return new ListIterator<>(list);
    }
}

Iterator接口,由JDK提供

package java.util;

import java.util.function.Consumer;
public interface Iterator<E> {
    boolean hasNext();
    E next();
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

ConcreteIterator如下:

package 二十三种设计模式.迭代器模式;


import java.util.Iterator;
import java.util.List;

/**
 * @author lc
 */
public class ListIterator<E> implements Iterator<E> {
    private List<E> list;
    private int size;

    public ListIterator(List<E> list) {
        this.list = list;
        this.size = 0;
    }

    @Override
    public boolean hasNext() {
        return size < this.list.size();
    }

    @Override
    public E next() {
        return list.get(size++);
    }
}

迭代器模式较为简单,其设计思想就是统一遍历,无论集合类内部如何变化,只要可以成功的返回迭代器就可以实现遍历

posted @ 2020-12-18 19:46  小鸡小鸡快点跑  阅读(95)  评论(0)    收藏  举报