迭代器模式(Iterator)

2021-08-23  本文已影响0人  Febare

定义

迭代器模式,提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部实现。

Java 中的 Collection、List、Set、Map 等都包含了迭代器,是迭代器模式最典型示例。


模式结构与实现

UML图
Code
public  abstract class Aggregate {
    public abstract Iterator getIterator();
    public abstract void add(Object obj);
    public abstract void remove(Object obj);
}

public abstract class Iterator {
    public abstract Object first();
    public abstract Object next();
    public abstract boolean hasNext();
}
 
public class ConcreteAggregate extends Aggregate {
    private List<Object> items = new ArrayList<Object>();
 
    @Override
    public Iterator getIterator() {
        return new ConcreteIterator(items);
    }

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

    @Override
    public void remove(Object obj) {
        items.remove(obj);
    }
}
 
public class ConcreteIterator extends Iterator {
    private List<Object> items = new ArrayList<Object>();
    private int count = 0;

    public ConcreteIterator(List<Object> items) {
        this.items = items;
    }
 
    @Override
    public Object first() {
        return items.get(0);
    }
 
    @Override
    public Object next() {
        return items.get(count++);
    }
 
    @Override
    public boolean hasNext() {
        return count >= items.size();
    }
}

public class Client {
    public static void main(String[] args) {
        ConcreteAggregate aggregate = new ConcreteAggregate();
        aggregate.add("江湾");
        aggregate.add("李坑");
        aggregate.add("思溪延村");
        aggregate.add("晓起村");
        aggregate.add("菊径村");

        Iterator iterator = aggregate.getIterator();

        System.out.println("首个景点:" + iterator.first());

        while (!iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

总结

优点
缺点
上一篇下一篇

猜你喜欢

热点阅读