设计模式 --- 迭代器模式

1.定义

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

2.使用场景

遍历一个容器对象

3.简单实现

大部分容器类都有提供迭代方法 不需要我们自己实现,这里实现一个通用代码。

//迭代器接口
interface Iterator<T>{
    //是否还有下一个元素 true表示有 false表示没有
    boolean hasNext();
    //返回当前位置的元素并将位置移至下一位
    T nextT();
}

//具体的迭代器类
class ConcreteIterator<T> implements Iterator<T>{

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

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

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

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

//容器接口
interface Aggregate<T>{
    //添加一个元素
    void  add(T obj);
    //删除一个元素
    void  remove(T obj);
    //获取容器的迭代器
    Iterator<T> iterator();
}

//具体容器类
class ConcreteAggregae<T> implements Aggregate<T>{
    private List<T> list = new ArrayList<T>();

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

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

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


public class IteratorMode {
    public static void main(String[] args){
        Aggregate<String> a = new ConcreteAggregae<>() ;
        a.add("a");
        a.add("b");
        a.add("c");
        a.add("d");
        Iterator<String> iterator =a.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.nextT());
        }
    }

}

4.小结 

优点:

支持以不同的方式去遍历一个容器对象,也可以有多个遍历,弱化了容器与遍历算法之间的关系。

缺点:

增加了类文件。

猜你喜欢

转载自blog.csdn.net/huxing0215/article/details/84307347