Padrão Iterator
-
Upload
robson-santiago -
Category
Technology
-
view
1.990 -
download
2
Transcript of Padrão Iterator
Design Patterns
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.
public class RestauranteDoLui {ArrayList<MenuItem> menuItens;
public RestauranteDoLui() {menuItens = new ArrayList<MenuItem>();addItem("Nhoque", false, 13.59);addItem("Peixe grelhado", false, 3.59);addItem("Frango a milanesa", false, 3.59);
private void addItem(_,_,_) MenuItem item = new MenuItem(_,_,_);menuItens.add(item);
public class RestauranteDoRodrigo {static final int MAX_ITENS = 6;int quantidadeDeItens = 0;MenuItem[] menuItens;
public RestauranteDoRodrigo()
this.menuItens = new MenuItem[MAX_ITENS];
addItem("Arroz a grega", false, 4.99);
addItem("Feijoada", false, 14.99);
addItem("Peixe grelhado", false, 17.50);
private void addItem(String descricao, boolean isVegetariano, double preco)
MenuItem menuItem = new MenuItem(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++;
public class Garconete {public void imprimirTodosItensDoMenu(){
RestauranteDoLui restDoLui = new RestauranteDoLui();ArrayList<MenuItem> itensDoLui = restDoLui.getMenuItens();
for (int i = 0; i < itensDoLui.size(); i++) MenuItem itemDoLui = itensDoLui.get(i);System.out.println("Descrição: "+itemDoLui.getDescricao()+"
é vegetariano: "+ itemDoLui.isVegetarianoString() + " preço: R$ ");
RestauranteDoRodrigo restDoRod = new RestauranteDoRodrigo();MenuItem[] itensDoRod = restDoRod.getMenuItens();
for (int i = 0; i < itensDoRodrigo.length; i++) {MenuItem itemDoRodrigo = itensDoRodrigo[i];System.out.println("Descrição:
"+itemDoRodrigo.getDescricao()+" é vegetariano: "+ itemDoRodrigo.isVegetarianoString() + " preço: R$ ");
public interface Iterador {
boolean hasNext();Object next();
}
public class IteradorRod implements Iterador MenuItem[] itens;int posicao = 0;
public IteradorRod(MenuItem[] itens) this.itens = itens;
@Overridepublic boolean hasNext()
if(posicao >= itens.length || itens[posicao] == null){return false;
}else{return true;
@Overridepublic Object next()
MenuItem menuItem = itens[posicao];posicao++;return menuItem;
public class IteradorLui implements Iterador {ArrayList<MenuItem> itens;int posicao = 1;
public IteradorLui(ArrayList<MenuItem> menuItens)
this.itens = menuItens;
@Overridepublic boolean hasNext()
if(posicao >= itens.size() || itens.get(posicao) == null){return false;
}else{return true;
@Overridepublic Object next()
MenuItem menuItem = itens.get(posicao);posicao++;return menuItem;
public class GarconeteMelhorada {
RestauranteDoLui restauranteDoLui;
RestauranteDoRod restauranteDoRod;
public GarconeteMelhorada(RestauranteDoLui , RestauranteDoRod) {
.........;
public void imprimirMenu(){
Iterador iteradorDoLui = restauranteDoLui.criarIterador();
Iterador iteradorDoRod = restauranteDoRod.criarIterador();
System.out.println("Menu do Lui");
imprimirMenu(iteradorDoLui);
System.out.println("Menu do Rod");
imprimirMenu(iteradorDoRod);
private void imprimirMenu(Iterador iterador) {
while (iterador.hasNext()) {
MenuItem item = (MenuItem) iterador.next();
System.out.println("Descrição: "+item.getDescricao()+" é vegetariano: "+ item.isVegetarianoString() + " preço: R$ "+item.getPreco());
Obrigado !