设计模式学习笔记十六:迭代器模式
介绍
迭代器设计模式: 迭代器提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
适用性
- 达到了数据结构与操作的分离
- 访问一个集合对象而无需暴露它的内部表示
- 支持对集合对象的多种遍历
- 为遍历不同的集合结构提供一个统一的接口
UML结构图:

场景模拟
集合遍历操作
代码实现
1.定义迭代接口,即Iterator:
public interface Iterator<T> {
    public T first();
    public T next();
    public T current();
    public boolean hasNext();
}
2.实现迭代接口:
public class ConcreteIterator<T> implements Iterator {
    private List<T> list;
    private int cursor = 0;
    @Override
    public T first() {
        return list.get(0);
    }
    public ConcreteIterator(final List<T> list) {
        if (list == null) {
            throw new NullPointerException("list can not be null!");
        }
        this.list = list;
    }
    @Override
    public T next() {
        return hasNext() ? list.get(cursor++) : null;
    }
    @Override
    public T current() {
        return list.get(cursor);
    }
    @Override
    public boolean hasNext() {
        return cursor < list.size();
    }
}
3.模拟集合接口Aggregate:
public interface Aggregate<T> {
    public void add(T t);
    public void remove(int index);
    public Iterator<T> iterator();
}
4.模拟集合接口实现,ConcreteAggregate:
public class ConcreteAggregate implements Aggregate<String> {
    private List<String> list;
    public ConcreteAggregate() {
        list = new ArrayList<String>();
    }
    @Override
    public void add(String s) {
        list.add(s);
    }
    @Override
    public void remove(int index) {
        list.remove(index);
    }
    @Override
    public Iterator<String> iterator() {
        return new ConcreteIterator<String>(list);
    }
}
5.调用,即Client:
public class Run {
    public static void main(String[] args) {
        ConcreteAggregate aggregate = new ConcreteAggregate();
        aggregate.add("a");
        aggregate.add("b");
        aggregate.add("c");
        Iterator<String> iterator = aggregate.iterator();
        System.out.println(iterator.first());
        System.out.println();
        while (iterator.hasNext()) {
            System.out.println(iterator.current());
            System.out.println(iterator.next());
        }
    }
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号