**定义**:它提供一个方法访问一个容器对象中的各个元素,而又不需要暴露该对象的内部细节。
这个在javaAPI中已经封装的很好了,任何一个容器的遍历都可以使用Iterator来迭代。
![](https://box.kancloud.cn/2016-06-06_5755340b68b90.jpg)
## 一般模式:
Iterator抽象迭代器
抽象迭代器负责定义访问和遍历元素的接口,基本上有三个方法。next()、hasNext()、remove();
ConcreteIterator具体迭代器
具体迭代器角色要实现迭代器的接口,完成容器元素的遍历。
Aggregate抽象容器
容器角色负责提供创建具体迭代器角色的接口,必然提供一个类似iterator()方法
Concrete Aggregate具体容器。
具体容器实现容器接口定义的方法,创建出容纳迭代器的对象
~~~
public class IteratorTest {
public static void main(String[] args) {
//模拟容器,添加一些信息
Aggreragte aggVector = new ConcreteAggregate();
aggVector.add("lzl");
aggVector.add("xy");
aggVector.add("daughter");
//遍历
Iterator it = aggVector.iterator();
while(it.hasNext()){
//如果有下一个。获取信息
String info = (String) it.next();
System.out.println("------"+info);
}
}
}
/**
* 抽象的迭代器,只提供基本的方法。
*
* @author admin
*
*/
interface Iterator{
//删除
boolean remove();
//是否还有下一个
boolean hasNext();
//找到下一个元素。
Object next();
}
/**
* 具体接口的实现方法
* @author admin
*
*/
class ConcreteIterator implements Iterator{
private Vector vector ;
private int cursor = 0;
//构造函数,将需要遍历的vector对象传递进来
public ConcreteIterator(Vector vector) {
this.vector = vector;
}
@Override
public boolean remove() {
boolean flag = (boolean) this.vector.remove(this.cursor);
return flag;
}
@Override
public boolean hasNext() {
if(vector.size() != cursor){
return true;
}
return false;
}
@Override
public Object next() {
//如果还有下一个,就返回
if(this.hasNext()){
return this.vector.get(cursor++);
}
return null;
}
}
/**
* 抽想的接口容器类,例如java中的List集合等.
* @author admin
*
*/
interface Aggreragte{
//增加元素
boolean add(Object obj);
//创建迭代器的接口。
Iterator iterator();
//删除元素
boolean remove(Object obj);
}
/**
* 具体的抽象容器接口实现类,例如java中的ArrayList集合。
* @author admin
*
*/
class ConcreteAggregate implements Aggreragte{
private Vector vector = new Vector();
@Override
public Iterator iterator() {
return new ConcreteIterator(this.vector);
}
@Override
public boolean add(Object obj) {
boolean flag = vector.add(obj);
return flag;
}
@Override
public boolean remove(Object obj) {
boolean flag = vector.remove(obj);
return flag;
}
}
~~~
- 前言
- 6大设计原则(一)---单一职责原则
- 6大设计原则(二)---里氏替换原则
- 6大设计原则(三)---依赖倒置原则
- 6大设计模式(四)----接口隔离原则
- 6大设计原则(五)---迪米特法则
- 6大设计原则(六)---开闭原则。
- 设计模式(一)---单例模式
- 设计模式(二)---工厂方法模式
- 设计模式(三)---抽象工厂模式
- 设计模式(四)---模板方法模式
- 设计模式(五)---建造者模式
- 设计模式(六)---代理模式
- 设计模式(七)---原型模式
- 设计模式(八)---中介者模式
- 设计模式(九)---命令模式
- 设计模式(十)---责任链模式
- 设计模式(十一)---装饰模式
- 设计模式(十二)---策略模式
- 设计模式(十三)---适配器模式
- 设计模式(十四)---迭代器模式
- 设计模式(十五)---组合模式
- 设计模式(十六)---观察者模式
- 设计模式(十七)---门面模式
- 设计模式(十八)---备忘录模式
- 设计模式(十八)---访问者模式
- 设计模式(二十)---状态模式
- 设计模式(二十二)---享元模式
- 设计模式(二十三)---桥梁模式