迭代器模式

学习了设计模式中的迭代器模式,看了一些博客,理解以后,做个笔记进行总结。

至于迭代器模式的优点和缺点,网上有一堆,这篇博客就说说使用迭代器模式是什么样子,怎么使用吧。

迭代器模式里有4个角色:

1.抽象迭代器,换句话说就是可以有具体的迭代器实现它。一般来说会有这么两个方法:取得下一个元素的方法next()和判断是否遍历结束的方法hasNext()

2.具体迭代器,就是实现抽象迭代器

3.抽象容器, 一般是一个接口,提供一个iterator()方法

4.具体容器

这里要举个例子说明一下:有个盆或者缸(这两个当然就是具体容器啦),里面有很多东西,当要遍历查看里面的东西时,需要勺子或者筷子(这两个就是具体迭代器了)去查看,这就是迭代器模式的基本内容

用代码说话:

首先,是一个抽象迭代器

/**
 * 抽象迭代器,可以认为是勺子啊、筷子啊、叉子啊等等
 * @author Administrator
 *
 */
public interface Iterator {
    boolean hasNext();
    Object next();
}

然后,是抽象容器

/**
 * 抽象容器,比如缸,盆,碗等等,里面装的东西就是Object
 * @author Administrator
 *
 */
public interface RongQi {

    public void add(Object obj);
    public Object get(int index);
    public Iterator iterator();
    public int getSize();
}

再然后,是具体迭代器和具体容器

/**
 * 具体迭代器,勺子。遍历容器里的Object那些内容
 * @author Administrator
 *
 */
public class ShaoZi implements Iterator {

    private RongQi rq;
    private int index;
    
    public ShaoZi(RongQi rongqi) {
        this.rq = rongqi;
    }
    
    @Override
    public boolean hasNext() {
        // TODO Auto-generated method stub
        if(index >= rq.getSize()) {
            return false;
        }else {
            return true;
        }
    }

    @Override
    public Object next() {
        // TODO Auto-generated method stub
        Object object = rq.get(index);
        index++;
        return object;
    }

}
/**
 * 具体容器,碗。里面装的东西都是Object
 * @author Administrator
 *
 */
public class Wan implements RongQi{

    private Object[] rongqi;
    private int size = 0;
    private int index = 0;
    
    public Wan() {
        index = 0;
        size = 0;
        rongqi = new Object[100];
    }
    
    @Override
    public void add(Object obj) {
        // TODO Auto-generated method stub
        rongqi[index++] = obj;
        size++;
    }

    @Override
    public Object get(int index) {
        // TODO Auto-generated method stub
        return rongqi[index];
    }

    @Override
    public Iterator iterator() {
        // TODO Auto-generated method stub
        return new ShaoZi(this);
    }

    @Override
    public int getSize() {
        // TODO Auto-generated method stub
        return size;
    }

}

最后,是主程序

public class MainApp {

    public static void main(String[] args) {
        // 新建一个容器,碗,往里面加上a,B,c
        RongQi rq = new Wan();
        rq.add("a");
        rq.add("B");
        rq.add("c");
        // 这是容器碗的迭代器---勺子
        Iterator it = rq.iterator();
        // 用勺子遍历碗里面的东西
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

运行结果为:

a

B

c

以上就是迭代器模式简单的例子,还要继续学习下去。。

原文地址:https://www.cnblogs.com/miantiaoandrew/p/7905863.html