Padrão Iterator

10
Design Patterns

Transcript of Padrão Iterator

Page 1: Padrão Iterator

Design Patterns

Page 2: Padrão Iterator

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.

Page 3: Padrão Iterator

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);

Page 4: Padrão Iterator

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++;

Page 5: Padrão Iterator

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$ ");

Page 6: Padrão Iterator

public interface Iterador {

boolean hasNext();Object next();

}

Page 7: Padrão Iterator

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;

Page 8: Padrão Iterator

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;

Page 9: Padrão Iterator

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());

Page 10: Padrão Iterator

Obrigado !