迭代器模式——提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
类图
关键代码展示
1.先定义一个迭代器接口
public interface Iterator{
boolean hasNext();
Object next();
}
这两个方法就是迭代器的关键。
2.现在我们需要实现一个具体的菜单迭代器
public class DinerMenuIterator implements Iterator{
MenuItem[] items;
int position = 0;
public DinerMenuIterator(MenuItem[] items){
this.items = items;
}
public Object next(){
MenuItem menuItem = items[position];
position = position + 1;
return menuItem;
}
public boolean hasNext(){
if(position >= items.length || items[position] == null){
return false;
} else {
return true;
}
}
}
3.有了菜单的迭代器,现在我们应该用它来改写菜单
public class DinerMenu{
static final int MAX_ITEMS = 6;
int numberOfItems = 0;
MenuItem[] menuItems;
//构造器
//其他方法
public Iterator creatIterator(){
return new DinerMenuIterator(menuItems);
}
}
这样我们就可以在代码中对菜单使用迭代器模式来遍历了。
总结
1.迭代器给我们提供了一个方法,可以顺序的访问一个聚集对象中的元素,而又不用知道内部是如何表示的。
2.迭代器模式把元素之间游走的责任交给迭代器,而不是聚合对象。这不仅让聚合的接口和实现变得更加简洁,也可以让聚合更专注它所应该专注的事情上面,而不必去理会遍历的事情。
如有错误欢迎评论指正
本文例子来自《Head First 设计模式》一书,若需要资源可以查看评论区