迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
简单来说,就是把不同集合的遍历操作分别封装起来。
代码:
数组的迭代器实现(ArrayList本身可以获取迭代器,这里省略实现ArrayList的迭代器)
public class ItemBIterator implements Iterator {
private String[] list;
int position = 0;
public ItemBIterator(String[] list) {
this.list = list;
}
@Override
public boolean hasNext() {
if (position >= list.length || list[position] == null) {
return false;
} else {
return true;
}
}
@Override
public Object next() {
String s = list[position];
position += 1;
return s;
}
}
菜单的具体实现
public interface Item {
public Iterator createIterator();
}
class ItemA implements Item {
ArrayList<String> list = new ArrayList<>(Arrays.asList("早餐1","早餐2","早餐3"));
@Override
public Iterator createIterator() {
return list.iterator();
}
}
class ItemB implements Item {
String[] list = {"午餐1", "午餐2", "午餐3", "午餐4", "午餐5", "午餐6"};
@Override
public Iterator createIterator() {
return new ItemBIterator(list);
}
}
用相同的框架方式打印不同种类(数组vsList)的菜单
public class Menu {
private Item itemA;
private Item itemB;
public static void main(String[] args) {
Menu menu = new Menu(new ItemA(), new ItemB());
menu.printAll();
}
public Menu(Item itemA, Item itemB) {
this.itemA = itemA;
this.itemB = itemB;
}
public void printAll() {
Iterator itemAIterator = itemA.createIterator();
Iterator itemBIterator = itemB.createIterator();
System.out.println("---------打印早餐菜单----------");
printItem(itemAIterator);
System.out.println("---------打印午餐菜单----------");
printItem(itemBIterator);
}
private void printItem(Iterator iterator) {
while (iterator.hasNext()) {
String s = (String)iterator.next();
System.out.println(s);
}
}
}