迭代器模式-Iterator

Posted rouqinglangzi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器模式-Iterator相关的知识,希望对你有一定的参考价值。

一、定义

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

二、结构

(1)迭代器角色(Iterator):定义遍历元素所需要的方法,一般来说会有这么三个方法:

  • next():获取下一个元素的方法,
  • hasNext():判断是否遍历结束的方法
  • remove():移出当前对象的方法

(2)具体迭代器角色(Concrete Iterator):实现迭代器接口中定义的方法,完成集合的迭代。

(3)容器角色(Aggregate):  一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等

(4)具体容器角色(ConcreteAggregate):就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。

三、例子

抽象的集合

/**
 * 抽象的聚集。(可以理解为Java中的Collection接口)
 */
public interface Aggregate 

    //返回迭代器
    Iterator iterator();

抽象的迭代器

/**
 * 抽象的迭代器
 */
public interface Iterator 

    //移动到第一个元素
    void first();

    //是否还有元素
    boolean hasNext();

    //返回下一个元素
    Object next();

具体的集合

/**
 * 具体的聚集(可以理解为Java中的Collection的实现类)
 */
public class ConcreteAggregate implements Aggregate 

    private Object[] list = "zhangsan", "lisi", "wangwu", "zhaoliu";

    public Object getElement(int index) 
        if (index < list.length) 
            return list[index];
        
        //越界
        return null;
    

    public int size() 
        return list.length;
    

    /**
     * 由当前具体的聚集返回迭代器
     */
    @Override
    public Iterator iterator() 
        return new ConcreteIterator(this);
    

具体的迭代器

/**
 * 具体的迭代器
 */
public class ConcreteIterator implements Iterator 

    private ConcreteAggregate concreteAggregate;
    private int index;
    private int size;

    public ConcreteIterator(ConcreteAggregate concreteAggregate) 
        this.concreteAggregate = concreteAggregate;
        size = concreteAggregate.size();
        index = 0;
    

    @Override
    public void first() 
        index = 0;
    

    @Override
    public boolean hasNext() 
        return index < size;
    

    @Override
    public Object next() 
        return concreteAggregate.getElement(index++);
    

客户端代码

public class Client 

    public static void main(String[] args) 
        Aggregate aggregate = new ConcreteAggregate();
        Iterator iterator = aggregate.iterator();
        while (iterator.hasNext()) 
            Object element = iterator.next();
            System.out.println(element);
        
    



打印结果:
    zhangsan
    lisi
    wangwu
    zhaoliu

 

以上是关于迭代器模式-Iterator的主要内容,如果未能解决你的问题,请参考以下文章

设计模式一:迭代器(Iterator)模式

迭代器模式-Iterator

GOF23设计模式之迭代器模式(iterator)

Iterator - 迭代器模式

迭代器模式(Iterator Pattern)

JAVA设计模式之迭代器设计模式