定义
迭代器模式提供一种方法顺序访问一个集合对象中的各个元素,而又不暴露其内部的表示。
代码demo
迭代类
public class Waitress {
ArrayList<Menu<Menuitem>> list;
public Waitress(ArrayList<Menu<Menuitem>> list) {
this.list=list;
}
public void printMenu(){
for(Menu<Menuitem> mm : list){
printMenu(mm.createIterator());
}
}
public void printMenu(Iterator<Menuitem> it){
while(it.hasNext()){
Menuitem m = it.next();
System.out.println(m.getName()+"___________"+m.getPrice());
}
}
}
被迭代类
public class DinnerMenuIterator implements Iterator<Menuitem>{
private Menuitem[] menu;
private int position=0;
public DinnerMenuIterator(Menuitem[] menu) {
this.menu=menu;
position=0;
}
public boolean hasNext() {
if(position>=menu.length || menu[position]==null)
return false;
return true;
}
public Menuitem next() {
Menuitem m = menu[position];
position++;
return m;
}
}
public class LaunchMenuIterator implements Iterator<Menuitem>{
private ArrayList<Menuitem> menu;
private int position;
public LaunchMenuIterator(ArrayList<Menuitem> menu) {
this.menu=menu;
}
public boolean hasNext() {
if(position >= menu.size() || menu.get(position)==null)
return false;
return true;
}
public Menuitem next() {
Menuitem m = menu.get(position);
position++;
return m;
}
}
单元测试
public class UnitTest {
public static void main(String[] args) {
ArrayList<Menu<Menuitem>> list = new ArrayList<Menu<Menuitem>>();
list.add(new LunchMenu());
list.add(new DinnerMenu());
Waitress w = new Waitress(list);
w.printMenu();
}
}