设计模式之迭代器模式(十)

作者 : 开心源码 本文共1894个字,预计阅读时间需要5分钟 发布时间: 2022-05-12 共156人阅读

?这天是周末,小明坐着旅行大巴车出去游玩,在大巴车上,售票员需要收汽车票。这个售票员其实在做一件重要的事,就是把车厢里所有的人都遍历了一遍,不放过一个不买票的乘客,这也是一个设计模式的表现,那就是迭代器模式。

一、什么是迭代器模式?

??提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象内部表示。


二、迭代器模式的组成?

  • 迭代器角色(Iterator)

??定义遍历元素所需要的方法,一般来说会有这么三个方法,获得下一个元素的方法next(),判断能否遍历结束的方法hashNext(),移除当前对象的方法remove()。

  • 具体迭代器角色(Concrete Iterator)

??实现迭代器接口中定义的方法,完成集合的迭代。

  • 容器角色(Aggregate)

??一般是一个接口,提供一个iterator()方法,例如Java中Collection接口,List接口,Set接口等。

  • 具体容器角色(Concrete Aggregate)

??笼统容器的具体实现类,比方List接口中的有序实现ArrayList,List接口中的链表实现LinkedList,Set中的哈希列表的实现HashSet等。

类图

  • 迭代器角色
public interface Iterator {      public boolean hasNext();      public Object next();}
  • 具体迭代器角色
public class ConcreteIterator implements Iterator  {       private int index;       private List list = null;       public ConcreteIterator(List list) {              super();              this.list = list;       }       @Override       public boolean hasNext() {            if (index >= list.getSize()) {                  return false;            } else {                  return true;            }       }       @Override       public Object next() {             Object object = list.get(index);             index++;            return object;       }}
  • 容器角色
public interface List {       public void add(Object obj);       public Object get(int index);       public Iterator iterator();       public int getSize();}
  • 容器角色实现类
public class ConcreteAggregate implements List {private Object[] list;private int size = 0;private int index = 0;public ConcreteAggregate(){    index = 0;    size = 0;    list = new Object[100];}@Overridepublic void add(Object obj) {    list[index ++] =obj;    size ++;}@Overridepublic Object get(int index) {    return list[index];}@Overridepublic Iterator iterator() {    return new ConcreteIterator(this);}@Overridepublic int getSize() {    return size;}}
  • 测试类
public class IteratorTest {public static void main(String []args) {    List list = new ConcreteAggregate();    list.add("a");    list.add("b");    list.add("c");    list.add("d");    Iterator it=list.iterator();    while(it.hasNext()){        System.out.println(it.next());    }}}

三、迭代器适用场景

??提供一种方法顺序访问一个聚合对象中各个元素,而不是暴露该对象内部表示。当需要访问一个聚集对象,而且不论这些对象是什么都需要遍历的时候应该考虑使用迭代器模式。

  • 总结

??迭代器(Iterator)模式就是分离了集合对象的遍历行为,笼统出一个迭代器来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。
??看来那个售票员是了不起的迭代高手,每次需要统计人数,而后对整车的乘客迭代遍历,不放过任何漏网之鱼。
??编程又何尝不是这样,我相信代码没有最好,只有更好,我要继续努力。


注意啦! 往期设计模式在这里


说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 设计模式之迭代器模式(十)

发表回复