设计模式之迭代器模式

来源:互联网 发布:微信公众平台seo 编辑:程序博客网 时间:2024/06/13 10:19

迭代器模式曾经是一种最常见、最简单的设计模式,提供了一种顺序访问某个集合中所有元素的解决方案,而不用了解元素的底层操作。现在的新兴语言都将迭代器集成了进去,但是了解迭代器模式的实现对理解面向对象开发而言仍然尤其意义。

GOF对迭代器模式的定义是:提供一种方法顺序访问聚合对象中的各个元素,而又不暴露该对象的内部表示。以筛选简历简单演示下。

//抽象聚集类代码public abstract class Aggregate {public abstract Iterator CreateIterator();}

//一个具体的聚集类public class ConcreteAggregate extends Aggregate {private List<Object> items = new ArrayList<Object>();@Overridepublic Iterator CreateIterator() {// return new ConcreteI;return null;}public int getSize() {return items.size();}public Object getItem(int index) {return items.get(index);}public void setItem(int index, Object obj) {items.add(index, obj);}}
//抽象的迭代器代码public abstract class Iterator {public abstract Object First();public abstract Object Next();public abstract Boolean IsDone();public abstract Object CurrentItem();}

//具体的迭代器代码public class ConcreteIterator extends Iterator {private ConcreteAggregate aggregate;private int current = 0;public ConcreteIterator(ConcreteAggregate aggregate) {super();this.aggregate = aggregate;}@Overridepublic Object First() {// TODO Auto-generated method stubreturn this.aggregate.getItem(0);}@Overridepublic Object Next() {Object obj = null;current++;if(current < this.aggregate.getSize())obj = this.aggregate.getItem(current);return obj;}@Overridepublic Boolean IsDone() {if(current >= this.aggregate.getSize())return true;elsereturn false;}@Overridepublic Object CurrentItem() {// TODO Auto-generated method stubreturn this.aggregate.getItem(current);}}
客户端实现

public class Client {public static void main(String[] args) {ConcreteAggregate aggregate = new ConcreteAggregate();for(int i = 0;i<10;i++) {aggregate.setItem(i, "求职者" + (i +1));}Iterator iterator = new ConcreteIterator(aggregate);while(!iterator.IsDone()) {System.out.println(iterator.CurrentItem() + "请于明日14:00来我司面试");iterator.Next();}}}
运行截图



迭代器是为容器而生的,其本质就是一种遍历算法。在迭代器模式中,通常会提供一个外部的迭代器以便对当前聚合对象进行遍历和访问,迭代器定义的是一个访问该聚合元素的接口,并且可以跟踪当前所遍历的元素,以便了解那些元素已经遍历过而那些没有被遍历过。

以上内容,整理自刘径舟,张玉华编著的《设计模式其实很简单》读书笔记,欢迎转载

原创粉丝点击