定义:
提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节,为容器服务
角色:
- 抽象迭代器:负责定义访问遍历集合的接口 next hasnext
- 具体迭代器:实现Iterator接口 完成遍历
- 抽象聚集:创建迭代器
- 具体聚集:实现接口,定义容器,实现getElement方法 读取容器vector.get(index)
实例:
package 迭代器模式;
public interface Iterator1 {
public Object next();
public boolean hasNext();
}
package 迭代器模式;
public class ConcreteIterator implements Iterator1{
private int index = 0;
private int size = 0;
private ConcreteAggregate agg;
public ConcreteIterator(ConcreteAggregate agg){
this.agg = agg;
size = agg.size();
index = 0;
}
@Override
public Object next() {
// TODO 自动生成的方法存根
if(index<size){
return agg.getElement(index++);
}
return null;
}
@Override
public boolean hasNext() {
// TODO 自动生成的方法存根
return index<size;
}
}
package 迭代器模式;
import java.util.Vector;
public class ConcreteAggregate {
private Vector vector = new Vector();
public void add(Object object) {
this.vector.add(object);
}
public Object getElement(int index) {
if(index<vector.size()){
return vector.get(index);
}else{
return null;
}
}
public int size() {
// TODO 自动生成的方法存根
return vector.size();
}
public Iterator1 conerteIterator1() {
return new ConcreteIterator(this);
}
}
package 迭代器模式;
public class Main {
public static void main(String []args) {
ConcreteAggregate aggregate = new ConcreteAggregate();
aggregate.add("A");
aggregate.add("B");
aggregate.add("C");
aggregate.add("D");
aggregate.add("E");
aggregate.add("F");
Iterator1 iterator1 = aggregate.conerteIterator1();
while(iterator1.hasNext()){
System.out.println(iterator1.next());
}
}
}
A
B
C
D
E
F
各种容器的遍历
package 迭代器模式1;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Stack;
import java.util.Vector;
public class IteratorDemo {
private static void show(Iterator iterator){
while(iterator.hasNext()){
System.out.print(iterator.next()+" ");
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
//向量
Vector vector = new Vector();
vector.add("向量1");
vector.add("向量2");
vector.add("向量3");
vector.add("向量4");
vector.add("向量5");
//序列
ArrayList list = new ArrayList();
list.add("序列1");
list.add("序列2");
list.add("序列3");
//栈
Stack stack = new Stack();
Stack stack1 = new Stack();
stack.push("A");
stack.push("B");
stack.push("C");
stack.push("D");
stack1.add("A");
stack1.add("B");
stack1.add("C");
stack1.add("D");
Iterator iterator = vector.iterator();
show(iterator);
System.out.println();
Iterator iterator1 = list.iterator();
show(iterator1);
System.out.println();
Iterator iterator2 = stack.iterator();
show(iterator2);
System.out.println();
Iterator iterator3 = stack1.iterator();
show(iterator3);
}
}
向量1 向量2 向量3 向量4 向量5
序列1 序列2 序列3
A B C D
A B C D