模式介绍
迭代器模式主要是提供了一种顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示。
应用场景
遍历一个容器对象时
代码例子
UML
迭代器接口
/**
* 迭代器
*/
public interface Iterator {
/**
* 是否有下一个对象
* @return
*/
public boolean hasNext();
/**
* 获取下一个对象
* @return
*/
public Object next();
}
迭代器具体实现类
/**
* 迭代器实现类
*/
public class ConcreteIterator implements Iterator{
private List list = null;
private int index;
public ConcreteIterator(List list){
this.list = list;
}
@Override
public boolean hasNext() {
if(index<list.getSize()){
return true;
}else{
return false;
}
}
@Override
public Object next() {
Object object = list.get(index);
index++;
return object;
}
}
容器接口
/**
* 容器角色
*/
public interface List {
/**
* 添加
* @param object
*/
public void add(Object object);
/**
* 取值
* @param index
* @return
*/
public Object get(int index);
/**
* 迭代
* @return
*/
public Iterator iterator();
/**
* 获取长度
* @return
*/
public int getSize();
}
容器实现类
/**
* 容器实现类
*/
public class ConcreteList implements List{
public Object[] objects;
public int size;
public int index;
public ConcreteList(){
index = 0;
size = 5;
objects = new Object[size];
}
@Override
public void add(Object object) {
//动态增长数组长度
// if(index>=size){
// size = size*2;
// Object[] objectnew = new Object[size];
// for(int i=0;i<objects.length;i++){
// objectnew[i] = objects[i];
// }
// objects = objectnew;
//
// }
objects[index] = object;
index++;
}
@Override
public Object get(int index) {
return objects[index];
}
@Override
public Iterator iterator() {
return new ConcreteIterator(this);
}
@Override
public int getSize() {
return index;
}
}
Main
/**
* 设计模式之迭代器模式
* @author S
*
*/
public class Main {
public static void main(String args[]){
List list = new ConcreteList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
Iterator iterator = new ConcreteIterator(list);
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
打印
1
2
3
4