在访问一些集合类中的对象时,不同的集合类有不同的访问方式,这使得我们访问集合类中的元素很不方便。能不能提供一个统一的方法来访问所有的集合类中的对象,代器模式就是为解决这个问题而诞生的。
在JDK的List等集合类中有iterator()方法,该方法返回一个Iterator类型的对象,其实是在ArrayList类中定义的一个内部类;下面的代码模拟JDK中ArrayList的实现来让大家了解迭代器模式;
迭代器模式的UML类图如下:
在下面的代码中,Sequence类相当于JDK中的ArrayList类,Selector接口相当于JDK中的Iterator接口;
Selector接口中的方法定义如下:
package com.javaInnerClass;
public interface Selector {
boolean end();
void next();
Object current();
}
Sequence类定义如下:
package com.javaInnerClass;
public class Sequence {
private Object[] items;
private int i;
public Sequence(){
}
public Sequence(int size){
items = new Object[size];
}
class SequenceSelector implements Selector{
private int next;
@Override
public boolean end() {
return (next==items.length);
}
@Override
public void next() {
// TODO Auto-generated method stub
next++;
}
@Override
public Object current() {
// TODO Auto-generated method stub
return items[next];
}
}
public void addElement(Object o){
if(i<items.length)
items[i++] = o;
}
public Selector selector(){
return new SequenceSelector();
}
//测试这个Sequence类的使用情况
public static void main(String[] args) {
Sequence seq = new Sequence(10);
for(int j=0;j<10;j++)
seq.addElement(String.valueOf(j));
Selector s = seq.selector();
while(!s.end()){
System.out.print(s.current()+" ");
s.next();
}
}
}