Java迭代器模式(iterator)

简介: 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。又称为:游标cursor模式


迭代器模式

概念介绍

 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。又称为:游标cursor模式

image.png

image.png

案例实现

1.自定义的迭代器接口

/**
 *  自定义的迭代器接口
 * @author 波波烤鸭
 *
 */
public interface MyIterator {
  void first(); //将游标指向第一个元素
  void next();  //将游标指向下一个元素
  boolean hasNext();//判断是否存在下一个元素
  boolean isFirst();
  boolean isLast();
  Object getCurrentObj();  //获取当前游标指向的对象
}

2.自定义的聚合类

/**
 * 自定义的聚合类
 * @author 波波烤鸭
 *
 */
public class ConcreteMyAggregate {
  private List<Object> list = new ArrayList<Object>();
  public void addObject(Object obj){
    this.list.add(obj);
  }
  public void removeObject(Object obj){
    this.list.remove(obj);
  }
  public List<Object> getList() {
    return list;
  }
  public void setList(List<Object> list) {
    this.list = list;
  }
  //获得迭代器
  public MyIterator  createIterator(){
    return new ConcreteIterator();
  }
  //使用内部类定义迭代器,可以直接使用外部类的属性
  private class ConcreteIterator implements MyIterator {
    private int cursor;  //定义游标用于记录遍历时的位置
    @Override
    public void first() {
      cursor = 0;
    }
    @Override
    public Object getCurrentObj() {
      return list.get(cursor);
    }
    @Override
    public boolean hasNext() {
      if(cursor<list.size()){
        return true;
      }
      return false;
    }
    @Override
    public boolean isFirst() {
      return cursor==0?true:false;
    }
    @Override
    public boolean isLast() {
      return cursor==(list.size()-1)?true:false;
    }
    @Override
    public void next() {
      if(cursor<list.size()){
        cursor++;
      }
    } 
  }
}

3.客户端测试

public static void main(String[] args) {
  ConcreteMyAggregate cma = new ConcreteMyAggregate();
  cma.addObject("aa");
  cma.addObject("bb");
  cma.addObject("cc");
  MyIterator iter = cma.createIterator();
  while(iter.hasNext()){
    System.out.println(iter.getCurrentObj());
    iter.next();
  }
}

开发中常见的场景:

JDK内置的迭代器(List/Set)


相关文章
|
1月前
|
设计模式 Java
Java设计模式【十七】:迭代器模式
Java设计模式【十七】:迭代器模式
40 0
|
8月前
|
设计模式 存储 Java
【设计模式——学习笔记】23种设计模式——迭代器模式Iterator(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——迭代器模式Iterator(原理讲解+应用场景介绍+案例介绍+Java代码实现)
32 0
|
1月前
|
设计模式 安全 Java
【JAVA】Iterator 怎么使用?有什么特点
【JAVA】Iterator 怎么使用?有什么特点
|
1月前
|
Java
【JAVA】Iterator 和 ListIterator 有什么区别?
【JAVA】Iterator 和 ListIterator 有什么区别?
|
2天前
|
设计模式 Java
Java设计模式之迭代器模式详解
Java设计模式之迭代器模式详解
|
1月前
|
Java API 索引
Java Iterator(迭代器)
5月更文挑战第15天
|
1月前
|
设计模式 Java
23种设计模式,迭代器模式的概念优缺点以及JAVA代码举例
【4月更文挑战第8天】迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问一个聚合对象中的各个元素,而无需暴露该对象的内部表示。它主要用于遍历集合对象(如列表、树等)。
32 9
|
1月前
|
设计模式 搜索推荐 Java
面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
24 0
|
1月前
|
设计模式 Java 数据挖掘
聊聊Java设计模式-迭代器模式
迭代器(Iterator)模式,也叫做游标(Cursor)模式。我们知道,在Java 容器中,为了提高容器遍历的方便性,我们利用迭代器把遍历逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合容器的内部结构。
48 0
聊聊Java设计模式-迭代器模式
|
11月前
|
Java API
Java Iterator(迭代器)
Java Iterator(迭代器)
53 0