Iterator

定义

  迭代子模式又叫游标(Cursor)模式,属于对象的行为模式。

  迭代子模式提供一种方法顺序访问一个聚集中的各个元素,而不必暴露聚集的内部表示。为不同的聚集对象的迭代提供了一个共同的接口。

聚集,指的是多个对象聚在一起形成的总体称之为聚集,聚集对象是能够包容一组对象的容器对象。数组就是最基本的聚集。

JAVA中的聚集对象是实现了java.util.Collection接口的对象。如: List,Set,Queue...

 

为什么需要迭代子模式

  1,不同的聚集具有不同的遍历接口

  

结构和角色

  

  抽象迭代子(Iterator)角色 : 定义遍历聚集对象所需的接口。 

  具体迭代子(ConcreteIterator)角色 : 实现Iterator接口,保持迭代过程中的游标位置。

  聚集(Aggregate)角色 : 定义创建迭代子对象的接口。createIterator()。和管理聚集元素的接口。

  具体聚集(ConcreteAggregate)角色 : 实现Aggregate接口,返回一个合适的具体迭代子实例,并管理聚集元素。

 

package ds.iterator;

public interface Aggregate<E> {

    public abstract Iterator<E> createIterator();

    
}
package ds.iterator;

public class ConcreteAggregate<E> implements Aggregate<E> {
    
    @Override
    public Iterator<E> createIterator() {
        return new ConcreteIterator<E>();
    }

}
package ds.iterator;

public interface Iterator<E> {
    
    public abstract boolean hasNext();

    public abstract E next();

    public abstract void remove();
    
}
package ds.iterator;

public class ConcreteIterator<E> implements Iterator<E> {

    @Override
    public boolean hasNext() {
        return false;
    }

    @Override
    public E next() {
        return null;
    }

    @Override
    public void remove() {

    }

}

 

  迭代子模式把遍历聚集元素的责任交给迭代子,而不是聚集对象。这不仅让聚集的接口和实现变得更简洁,也可以让聚集更专注在它所应该专注的事情上(也就是管理对象集合),而不必去理会遍历的事情。 这是单一职责原则的体现。

  由于遍历算法封装在迭代子角色里面, 因此迭代的算法可以独立于聚集角色变化。由于客户端拿到的是迭代子对象, 因此,不必知道聚集对象的类型,就可以读取和遍历聚集对象。这样即便聚集对象的类型发生变化,也不会影响到客户端的遍历过程。(这是面向接口编程的精华)

 

单一职责原则 : 

  一个类应该只有一个引起变化的原因。

posted @ 2014-04-22 21:33  廖东海  阅读(172)  评论(0编辑  收藏  举报