写在前面的话
复习、总结23种设计模式
上一篇
迭代器模式
记重点
使用java自带的java.util.Iterator基本够用了
定义
它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节
迭代器模式的通用类图
Iterator抽象迭代器
抽象迭代器负责定义访问和遍历元素的接口,而且基本上是有固定的3个方法:firstO获得第一个元素,next()访问下一个元素,isDone()是否已经访问到底部(Java叫做hasNext()方法)。
package com.design.pattern.iterator.test02;
public interface Iterator {
boolean hasNext();
Object next();
}
ConcreteIterator具体迭代器 具体迭代器角色要实现迭代器接口,完成容器元素的遍历
package com.design.pattern.iterator.test02;
import java.util.Vector;
public class ConcreteIterator implements Iterator {
private Vector vector = new Vector();
private int size = 0;
public int cursor = 0;
public ConcreteIterator(Vector vector) {
this.vector = vector;
size = vector.size();
}
@Override
public boolean hasNext() {
return this.cursor < this.size;
}
@Override
public Object next() {
return this.hasNext() ? this.vector.get(this.cursor++) : null;
}
}
Aggregate抽象容器
容器角色负责提供创建具体迭代器角色的接口,必然提供一个类似createIterator()这样的方法,在Java中一般是iterator()方法。
package com.design.pattern.iterator.test02;
// 抽象容器
public interface Aggregate {
//添加
void add(Object obj);
//删除
void remove(Object obj);
//获取迭代器对象
Iterator iterator();
}
Concrete Aggregate具体容器 具体容器实现容器接口定义的方法,创建出容纳选代器的对象。
package com.design.pattern.iterator.test02;
import java.util.Vector;
// 具体容器
public class ConcreteAggregate implements Aggregate{
private Vector vector = new Vector();
@Override
public void add(Object obj) {
vector.add(obj);
}
@Override
public void remove(Object obj) {
vector.remove(obj);
}
@Override
public Iterator iterator() {
return new ConcreteIterator(vector);
}
}
测试
package com.design.pattern.iterator.test02;
public class Client {
public static void main(String[] args) {
Aggregate aggregate = new ConcreteAggregate();
aggregate.add("1");
aggregate.add("avc");
aggregate.add(5);
Iterator iterator = aggregate.iterator();
while (iterator.hasNext()) {
Object next = iterator.next();
System.out.println(next);
}
}
}