- 定义:它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。
- 如果你是做Java开发,尽量不要自己写迭代器模式!省省吧,使用Java提供的Iterator一般就能满足你的要求了,迭代器现在应用得越来越广泛了,甚至已经成为一个最基础的工具。一些大师级人物甚
至建议把迭代器模式从23个模式中删除,为什么呢?就是因为现在它太普通了,已经融入到各个语言和工具中了。
package design.iterator;
import java.util.Vector;
public interface Container {
void add(Object o);
boolean remove(Object o);
AbstractIterator Iterator();
}
class ConcreteContainer implements Container {
private Vector v = new Vector();
@Override
public void add(Object o) {
this.v.add(o);
}
@Override
public boolean remove(Object o) {
return this.v.remove(o);
}
@Override
public AbstractIterator Iterator() {
return new ConcreteIterator(this.v);
}
}
interface AbstractIterator {
Object next();
boolean hasNext();
boolean remove();
}
class ConcreteIterator implements AbstractIterator {
private Vector v;
private int cursor = 0;
public ConcreteIterator(Vector v) {
this.v = v;
}
@Override
public Object next() {
if (this.hasNext()) {
return this.v.get(this.cursor++);
}
return null;
}
@Override
public boolean hasNext() {
if(this.cursor == this.v.size()){
return false;
}
return true;
}
@Override
public boolean remove() {
this.v.remove(this.cursor);
return true;
}
}
class Test{
public static void main(String[] args) {
Container container = new ConcreteContainer();
container.add("123");
container.add("456");
container.add("789");
AbstractIterator iterator = container.Iterator();
while (iterator.hasNext()){
String s = iterator.next().toString();
System.out.println(s);
}
}
}
输出:
123
456
789