美文网首页
迭代器模式(Iterator)

迭代器模式(Iterator)

作者: Febare | 来源:发表于2021-08-23 23:28 被阅读0次

定义

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

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());
        }
    }
}

总结

优点
  • 访问一个聚合对象的内容而无须暴露它的内部实现,满足“开闭原则”。
  • 遍历任务交由迭代器完成,这简化了聚合类,满足“单一职责原则。
  • 支持以不同方式遍历一个聚合。
  • 增加新的聚合类和迭代器类都很方便,无须修改原有代码。
  • 封装性良好,为遍历不同的聚合结构提供一个统一的接口。
缺点
  • 对于比较简单的遍历(像数组或者有序列表),使用迭代器方式遍历较为繁琐。

相关文章

网友评论

      本文标题:迭代器模式(Iterator)

      本文链接:https://www.haomeiwen.com/subject/zyqhiltx.html