迭代器模式

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

  在设计中使用迭代器模式的影响:如果你有一个统一的方法访问聚合中的每一个对象,你就可以编写多态的代码和这些聚合搭配(当我们写了一个需要以迭代器当做参数的方法时,其实就是在使用多态的迭代。也就是说,我们所写出的代码,可以在不同的集合中游走,只要这个集合支持迭代器即可(实现该接口),比如下面代码示例中的类IteratorA和IteratorB);迭代器模式把在元素之间游走的责任交给迭代器,而不是聚合对象。这不仅让聚合的接口和实现变得简洁,也可以让聚合更专注它应该专注的事情上面(也就是管理对象集合),而不必去理会遍历的事情。

  代码示例:假如有两种聚合对象 数组 和 ArrayList,现在使用迭代器模式来封装遍历要素。

  先写一个迭代器接口:

public interface Iterator 
{
    public boolean HasNext();

    public Object Next();
}

  然后分别用各自的遍历规则实现接口Iterator。。。

IteratorA :
public class IteratorA implements Iterator
{
    Object[] objects;

    int position;

    public IteratorA(Object[] objects)
    {
        this.objects = objects;
    }

    public Object Next()
    {
        Object object = objects[position];
        position = position + 1;
        return object;
    }

    public boolean HasNext()
    {
        if (position >= objects.length || objects[position] = null)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}

 IteratorB :

public class IteratorB implements Iterator
{
    ArrayList objects;

    int position;

    public IteratorB(ArrayList objects)
    {
        this.objects = objects;
    }

    public Object Next()
    {
        Object object = objects.get(position);
        position = position + 1;
        return object;
    }

    public boolean HasNext()
    {
        if (position >= objects.size() || objects.get(position) = null)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}

  这样通过“针对接口编程,而不针对实现编程”,就可以减少对具体类的依赖,而且还可以不暴露其内部的表示。

原文地址:https://www.cnblogs.com/hachun/p/3620601.html