Padrão Iterator2. Padrão Iterator Fornece uma maneira de acessar seqüencialmente os elementos de um objeto agregado sem expor a sua representação subjacente. Delega a tarefa de acesso seqüencial ao objeto iterador e não ao agregado, o que simplifica a interface e a implementação. 3. publicclassRestauranteDoLui { ArrayList<MenuItem> menuItens; publicRestauranteDoLui() { menuItens = newArrayList<MenuItem>(); addItem("Nhoque", false, 13.59); addItem("Peixe grelhado", false, 3.59); addItem("Frango a milanesa", false, 3.59); privatevoidaddItem(_,_,_) MenuItem item = newMenuItem(_,_,_); menuItens.add(item); 4. publicclassRestauranteDoRodrigo { static final intMAX_ITENS = 6; intquantidadeDeItens = 0; MenuItem[] menuItens; publicRestauranteDoRodrigo() this.menuItens = newMenuItem[MAX_ITENS]; addItem("Arroz a grega", false, 4.99); addItem("Feijoada", false, 14.99); addItem("Peixe grelhado", false, 17.50); privatevoidaddItem(String descricao, booleanisVegetariano, doublepreco) MenuItemmenuItem = newMenuItem(descricao, isVegetariano, preco); if(this.quantidadeDeItens >= MAX_ITENS){ System.err.println("Desculpe, O menu já está cheio de itens."); }else{ menuItens[this.quantidadeDeItens] = menuItem; this.quantidadeDeItens++; 5. publicclassGarconete { publicvoidimprimirTodosItensDoMenu(){ RestauranteDoLuirestDoLui = newRestauranteDoLui(); ArrayList<MenuItem> itensDoLui = restDoLui.getMenuItens(); for (int i = 0; i < itensDoLui.size(); i++) MenuItemitemDoLui = itensDoLui.get(i); System.out.println("Descrição: "+itemDoLui.getDescricao()+" é vegetariano: "+ itemDoLui.isVegetarianoString() + " preço: R$ "); RestauranteDoRodrigorestDoRod = newRestauranteDoRodrigo(); MenuItem[] itensDoRod = restDoRod.getMenuItens(); for (int i = 0; i < itensDoRodrigo.length; i++) { MenuItemitemDoRodrigo = itensDoRodrigo[i]; System.out.println("Descrição: "+itemDoRodrigo.getDescricao()+" é vegetariano: "+ itemDoRodrigo.isVegetarianoString() + " preço: R$ "); 7. public class IteradorRod implements Iterador MenuItem[] itens; intposicao = 0; publicIteradorRod(MenuItem[] itens) this.itens = itens; @Override publicbooleanhasNext() if(posicao >= itens.length || itens[posicao] == null){ returnfalse; }else{ returntrue; @Override publicObjectnext() MenuItemmenuItem = itens[posicao]; posicao++; returnmenuItem; 8. public class IteradorLui implements Iterador { ArrayList<MenuItem> itens; intposicao = 1; publicIteradorLui(ArrayList<MenuItem> menuItens) this.itens = menuItens; @Override publicbooleanhasNext() if(posicao >= itens.size() || itens.get(posicao) == null){ returnfalse; }else{ returntrue; @Override publicObjectnext() MenuItemmenuItem = itens.get(posicao); posicao++; returnmenuItem; 9. publicclassGarconeteMelhorada { RestauranteDoLuirestauranteDoLui; RestauranteDoRodrestauranteDoRod; publicGarconeteMelhorada(RestauranteDoLui, RestauranteDoRod) { .........; publicvoidimprimirMenu(){ IteradoriteradorDoLui = restauranteDoLui.criarIterador(); IteradoriteradorDoRod = restauranteDoRod.criarIterador(); System.out.println("Menu do Lui"); imprimirMenu(iteradorDoLui); System.out.println("Menu do Rod"); imprimirMenu(iteradorDoRod); privatevoidimprimirMenu(Iteradoriterador) { while (iterador.hasNext()) { MenuItem item = (MenuItem) iterador.next(); System.out.println("Descrição: "+item.getDescricao()+" é vegetariano: "+ item.isVegetarianoString() + " preço: R$ "+item.getPreco());