Implement Iterator Design Pattern Without Custom Iterator Interface

master
Hammy 4 years ago
parent 982a301cd3
commit ffa4bcbdc3

@ -0,0 +1,46 @@
package iterator.without.custom.iterator;
import java.util.Iterator;
public class DinerMenu {
private static final int MAX_ITEMS = 6;
private int numberOfItems = 0;
private final MenuItem[] menuItems = new MenuItem[MAX_ITEMS];
public DinerMenu() {
addItem("Vegetarian BLT",
"(Fakin') Bacon with lettuce & tomato on whole wheat", true, 2.99);
addItem("BLT",
"Bacon with lettuce & tomato on whole wheat", false, 2.99);
addItem("Soup of the day",
"Soup of the day, with a side of potato salad", false, 3.29);
addItem("Hotdog",
"A hot dog, with saurkraut, relish, onions, topped with cheese",
false, 3.05);
addItem("Steamed Veggies and Brown Rice",
"Steamed vegetables over brown rice", true, 3.99);
addItem("Pasta",
"Spaghetti with Marinara Sauce, and a slice of sourdough bread",
true, 3.89);
}
public void addItem(String name, String description, boolean vegetarian, double price) {
if (numberOfItems < MAX_ITEMS) {
this.menuItems[numberOfItems++] = new MenuItem(name, description, vegetarian, price);
} else {
System.out.println("Sorry, menu is full! Can't add item to menu");
}
}
/*
Note: Using iterator to get rid of this code
public MenuItem[] getMenuItems() {
return menuItems;
}
*/
public Iterator<MenuItem> createIterator() {
return new DinerMenuIterator(menuItems);
}
}

@ -0,0 +1,25 @@
package iterator.without.custom.iterator;
import java.util.Iterator;
public class DinerMenuIterator implements Iterator<MenuItem> {
private final MenuItem[] menuItems;
private int currentIndex;
public DinerMenuIterator(MenuItem[] menuItems) {
this.menuItems = menuItems;
}
@Override
public boolean hasNext() {
return currentIndex < menuItems.length && menuItems[currentIndex] != null;
}
@Override
public MenuItem next() {
if (this.hasNext()) {
return menuItems[currentIndex++];
}
return null;
}
}

@ -0,0 +1,8 @@
package iterator.without.custom.iterator;
public class Main {
public static void main(String[] args) {
Waitress waitress = new Waitress(new PancakeHouseMenu(), new DinerMenu());
waitress.printMenu();
}
}

@ -0,0 +1,31 @@
package iterator.without.custom.iterator;
public class MenuItem {
private final String name;
private final String description;
private final boolean vegetarian;
private final double price;
public MenuItem(String name, String description, boolean vegetarian, double price) {
this.name = name;
this.description = description;
this.vegetarian = vegetarian;
this.price = price;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public boolean isVegetarian() {
return vegetarian;
}
public double getPrice() {
return price;
}
}

@ -0,0 +1,44 @@
package iterator.without.custom.iterator;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class PancakeHouseMenu {
private final List<MenuItem> menuItems = new ArrayList<>();
public PancakeHouseMenu() {
addItem("K&B's Pancake Breakfast",
"Pancakes with scrambled eggs, and toast",
true,
2.99);
addItem("Regular Pancake Breakfast",
"Pancakes with fried eggs, sausage",
false,
2.99);
addItem("Blueberry Pancakes",
"Pancakes made with fresh blueberries",
true,
3.49);
addItem("Waffles",
"Waffles, with your choice of blueberries or strawberries",
true,
3.59);
}
public void addItem(String name, String description, boolean vegetarian, double price) {
menuItems.add(new MenuItem(name, description, vegetarian, price));
}
public List<MenuItem> getMenuItems() {
return menuItems;
}
public Iterator<MenuItem> createIterator() {
return new PancakeHouseMenuIterator(menuItems);
}
}

@ -0,0 +1,26 @@
package iterator.without.custom.iterator;
import java.util.Iterator;
import java.util.List;
public class PancakeHouseMenuIterator implements Iterator<MenuItem> {
private final List<MenuItem> menuItems;
private int currentIndex;
public PancakeHouseMenuIterator(List<MenuItem> menuItems) {
this.menuItems = menuItems;
}
@Override
public boolean hasNext() {
return currentIndex < menuItems.size();
}
@Override
public MenuItem next() {
if (this.hasNext()) {
return menuItems.get(currentIndex++);
}
return null;
}
}

@ -0,0 +1,34 @@
package iterator.without.custom.iterator;
import java.util.Iterator;
public class Waitress {
private final PancakeHouseMenu pancakeHouseMenu;
private final DinerMenu dinerMenu;
public Waitress(PancakeHouseMenu pancakeHouseMenu, DinerMenu dinerMenu) {
this.pancakeHouseMenu = pancakeHouseMenu;
this.dinerMenu = dinerMenu;
}
public void printMenu() {
Iterator<MenuItem> pancakeIterator = pancakeHouseMenu.createIterator();
Iterator<MenuItem> dinerIterator = dinerMenu.createIterator();
System.out.println("MENU\n----\n\n||--BREAKFAST--||");
printMenu(pancakeIterator);
System.out.println("\n||--LUNCH--||");
printMenu(dinerIterator);
}
private void printMenu(Iterator<MenuItem> iterator) {
while (iterator.hasNext()) {
MenuItem menuItem = iterator.next();
System.out.println(menuItem.getName() + ", ");
System.out.println(menuItem.getPrice() + " -- ");
System.out.println(menuItem.getDescription());
}
}
}
Loading…
Cancel
Save