迭代器模式:提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露其內部的表示。
類圖: 使用迭代器模式,實現了烤魚菜單,類圖:
MenuItem類代碼實現:
接口Iterator代碼實現:
public interface Iterator { public boolean hasNext(); public Object next(); public void remove();}類FishIterator代碼實現:
public class FishIterator implements Iterator{ MenuItem[] items; int position = 0; public FishIterator(MenuItem[] items){ this.items = items; } @Override public boolean hasNext() { // TODO Auto-generated method stub if (position >=items.length || items[position] == null) { return false; }else { return true; } } @Override public Object next() { // TODO Auto-generated method stub MenuItem menuItem = items[position]; position = position + 1; return menuItem; } @Override public void remove() { // TODO Auto-generated method stub for (int i = position; i < (items.length -1); i++) { items[i] = items[i+1]; } items[items.length - 1] = null; }}接口Menu代碼實現:
public interface Menu { public Iterator createIterator();}類FishMenu代碼實現:
public class FishMenu implements Menu{ MenuItem[] items; static final int MAX_ITEMS = 6; int numberOfItems = 0; public FishMenu(){ items = new MenuItem[MAX_ITEMS]; addItem("烤鯽魚"); addItem("烤草魚"); addItem("烤大頭魚"); addItem("烤秋刀魚"); addItem("烤鯊魚"); } public void addItem(String name){ MenuItem menuItem = new MenuItem(name); if (numberOfItems >= MAX_ITEMS) { System.out.類Client代碼實現:public class Client { Menu fisMenu; public Client(Menu fishMenu){ this.fisMenu = fishMenu; } public void printMenu(){ Iterator fishIterator = fisMenu.createIterator(); printMenu(fishIterator); } public void printMenu(Iterator iterator){ while (iterator.hasNext()) { MenuItem menuItem = (MenuItem)iterator.next(); System.out.println(menuItem.getname()); } }}測試類MenuTest代碼實現:
public class MenuTest { public static void main(String[] args){ Menu fishMenu = new FishMenu(); Client client = new Client(fishMenu); client.printMenu(); }}執行結果:
烤鯽魚烤草魚烤大頭魚烤秋刀魚烤鯊魚新聞熱點
疑難解答