《Java设计模式之迭代器模式》

来源:互联网 发布:php require once use 编辑:程序博客网 时间:2024/06/13 22:20

《迭代器模式》

  Java中所有Collection下的集合都有一个iterator()方法返回Iterator接口的实现类,用于对该集合的遍历操作,这实际上就使用到了迭代器模式:提供一个方法顺序访问一个聚合对象的每一个元素,而有不暴露该对象的内部实现。

  迭代模式的结构:


 用代码模拟一下迭代器模式:
//抽象迭代器public interface MyIterator {boolean hasNext();Object next();}
//抽象容器public interface MyList {MyIterator createIterator();void add(Object obj);Object get();}
//具体容器public class ConcreteMyList implements MyList {private List<Object> list = new ArrayList<>();@Overridepublic MyIterator createIterator() {return new ConcreteMyIterator(list);}@Overridepublic void add(Object obj) {list.add(obj);}@Overridepublic Object get() {return createIterator().next();}}
//具体迭代器public class ConcreteMyIterator implements MyIterator {private List<Object> list;private int pointer;public ConcreteMyIterator(List<Object> list) {this.list = list;}@Overridepublic boolean hasNext() {if (pointer < list.size()){return true;}return false;}@Overridepublic Object next() {Object obj = list.get(pointer); pointer++;return obj;}}
//测试public static void main(String[] args) {ConcreteMyList list = new ConcreteMyList();list.add(1);list.add(2);list.add(3);MyIterator iterator = list.createIterator();while(iterator.hasNext()){System.out.println(iterator.next());}}

  总结

迭代器的优点:
1.提供了非常简单的遍历方法,客户端无需知道容器的内部结构,通过迭代器就可以轻易的获取元素
2.可以提供多种遍历方式,如正序或者倒序。

  因为Java已经为每一个集合设计好了迭代器,所以我们在使用时往往感觉不到迭代器模式的存在,而且在Java5之后,又有了Iterable接口,使得集合和数组的遍历更加方便。




原创粉丝点击