设计模式

迭代器模式

2020-02-15  本文已影响0人  milovetingting

个人博客

http://www.milovetingting.cn

迭代器模式

模式介绍

迭代器模式又称为游标(Cursor)模式,是行为型设计模式之一。

模式定义

提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示。

使用场景

遍历一个容器对象时。

简单使用

定义迭代器接口

/**
 * 迭代器接口
 * 
 * @author 160317250
 *
 * @param <T>
 */
public interface Iterator<T> {
    /**
     * 是否还有下一个元素
     * 
     * @return
     */
    boolean hasNext();

    /**
     * 返回当前位置的元素并将位置移至下一位
     * 
     * @return
     */
    T next();
}

定义迭代器实现类

/**
 * 具体迭代器类
 * @author 160317250
 *
 * @param <T>
 */
public class IteratorImpl<T> implements Iterator<T> {

    private List<T> list = new ArrayList<T>();
    private int cursor = 0;

    public IteratorImpl(List<T> list) {
        this.list = list;
    }

    @Override
    public boolean hasNext() {
        return cursor != list.size();
    }

    @Override
    public T next() {
        T obj = null;
        if (this.hasNext()) {
            obj = this.list.get(cursor++);
        }
        return obj;
    }

}

定义容器接口

/**
 * 容器接口
 * 
 * @author 160317250
 *
 */
public interface Container<T> {
    /**
     * 添加一个元素
     * 
     * @param obj
     */
    void add(T obj);

    /**
     * 移除一个元素
     * 
     * @param obj
     */
    void remove(T obj);

    /**
     * 获取容器的迭代器
     * 
     * @return
     */
    Iterator<T> iterator();
}

定义容器实现类

public class ContainerImpl<T> implements Container<T> {

    private List<T> list = new ArrayList<T>();

    @Override
    public void add(T obj) {
        list.add(obj);
    }

    @Override
    public void remove(T obj) {
        list.remove(obj);
    }

    @Override
    public Iterator<T> iterator() {
        return new IteratorImpl<>(list);
    }

}

调用

public class Main {

    public static void main(String[] args) {
        Container<String> container = new ContainerImpl<>();
        container.add("a");
        container.add("b");
        container.add("c");
        Iterator<String> iterator = container.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }

}

输出结果:

a
b
c

小结

对于迭代器模式来说,其自身优点很明显也很单一,支持以不同的方式去遍历一个容器对象,也可以有多个遍历,弱化了容器类与遍历算法之间的关系,而缺点就是对类文件的增加。

迭代器模式发展至今,几乎每一种高级语言都有相应的内置实现,对于开发者而言,已经极少自己实现迭代器,因此对于迭代器模式更多的是在于了解。

上一篇 下一篇

猜你喜欢

热点阅读