cs 210 iterator pattern october 31 st, 2006. example to motivate discussion we have two lists (of...

Post on 06-Jan-2018

216 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Look at Eclipse code for Class MenuItem Class PancakeHouseMenu Class DinerMenu

TRANSCRIPT

CS 210

Iterator PatternOctober 31st, 2006

Example to motivate discussion We have two lists (of menu items) one

implemented using ArrayList and another using Arrays.

How does one work with these two implementations of lists in a uniform way?

Example here uses restaurant items

Look at Eclipse code for Class MenuItem Class PancakeHouseMenu Class DinerMenu

Now if we want to… printMenu()

• Print every item on the menu printBreakfastMenu()

• Print just breakfast items printLunchMenu()

• Print just lunch items printVegetarianMenu() isItemVegetarian(name)

Iterating through breakfast items

Iterating through lunch items

Look at MenuTestDrive…

Encapsulating iteration Instead of using multiple ways to iterate

through the lists, define ONE interface to iterate through the lists …

Using iterator to get breakfast items

Using iterator to get lunch items

Meet the iterator pattern…

DinerMenuIterator

Look at… Code for DinerMenuIterator Code for PancakeHouseMenuIterator Code for Waitress

Some improvements… Utilizing the Java provided

implementation of iterator… Look at Eclipse…

Iterator Pattern defined

The Iterator Pattern provides a way to access the elements of an aggregate object sequentially without exposing its underlying representation.

Design Principle

A class should have only one reason to change.

Design principle applied to Iterator pattern Iterator patter places the task of traversal

on the iterator object, not on the aggregate, which simplifies the aggregate interface and implementation, and places the responsibility where it should be.

Extending the Menu example with one more aggregate Cafemenu which uses Hashtable to

implement the collection. Look at Eclipse.

Iterators and collections

A look at the waitress class public class Waitress {

Menu pancakeHouseMenu;Menu dinerMenu;Menu cafeMenu;

public Waitress(Menu pancakeHouseMenu, Menu dinerMenu, Menu cafeMenu) {this.pancakeHouseMenu = pancakeHouseMenu;this.dinerMenu = dinerMenu;this.cafeMenu = cafeMenu;}

public void printMenu() {Iterator pancakeIterator = pancakeHouseMenu.createIterator();Iterator dinerIterator = dinerMenu.createIterator();Iterator cafeIterator = cafeMenu.createIterator();

System.out.println("MENU\n----\nBREAKFAST");printMenu(pancakeIterator);System.out.println("\nLUNCH");printMenu(dinerIterator);System.out.println("\nDINNER");printMenu(cafeIterator);}

Removing dependence on specific menu items… public class Waitress {

ArrayList menus;

public Waitress(ArrayList menus) {this.menus = menus;}

public void printMenu() {Iterator menuIterator = menus.iterator();while(menuIterator.hasNext()) {Menu menu = (Menu)menuIterator.next();printMenu(menu.createIterator());}}

void printMenu(Iterator iterator) {while (iterator.hasNext()) {MenuItem menuItem = (MenuItem)iterator.next();System.out.print(menuItem.getName() + ", ");System.out.print(menuItem.getPrice() + " -- ");System.out.println(menuItem.getDescription());}}

}

top related