定义
迭代子模式又叫游标(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() { } }
迭代子模式把遍历聚集元素的责任交给迭代子,而不是聚集对象。这不仅让聚集的接口和实现变得更简洁,也可以让聚集更专注在它所应该专注的事情上(也就是管理对象集合),而不必去理会遍历的事情。 这是单一职责原则的体现。
由于遍历算法封装在迭代子角色里面, 因此迭代的算法可以独立于聚集角色变化。由于客户端拿到的是迭代子对象, 因此,不必知道聚集对象的类型,就可以读取和遍历聚集对象。这样即便聚集对象的类型发生变化,也不会影响到客户端的遍历过程。(这是面向接口编程的精华)
单一职责原则 :
一个类应该只有一个引起变化的原因。