From 221635d97bf495877c61aa534bd56ea05d932cf3 Mon Sep 17 00:00:00 2001 From: Kaylee Date: Wed, 1 Oct 2025 20:44:03 -0400 Subject: [PATCH] first draft iterator --- .../iterator_pattern/BreakfastMenu.java | 23 +++++++++++++ .../BreakfastMenuIterator.java | 28 +++++++++++++++ assignments/iterator_pattern/DinnerMenu.java | 30 ++++++++++++++++ .../iterator_pattern/DinnerMenuIterator.java | 31 +++++++++++++++++ assignments/iterator_pattern/Menu.java | 8 +++++ assignments/iterator_pattern/MenuItem.java | 32 +++++++++++++++++ assignments/iterator_pattern/MenuTest.java | 24 +++++++++++++ assignments/iterator_pattern/MyIterator.java | 8 +++++ assignments/iterator_pattern/Waiter.java | 34 +++++++++++++++++++ 9 files changed, 218 insertions(+) create mode 100644 assignments/iterator_pattern/BreakfastMenu.java create mode 100644 assignments/iterator_pattern/BreakfastMenuIterator.java create mode 100644 assignments/iterator_pattern/DinnerMenu.java create mode 100644 assignments/iterator_pattern/DinnerMenuIterator.java create mode 100644 assignments/iterator_pattern/Menu.java create mode 100644 assignments/iterator_pattern/MenuItem.java create mode 100644 assignments/iterator_pattern/MenuTest.java create mode 100644 assignments/iterator_pattern/MyIterator.java create mode 100644 assignments/iterator_pattern/Waiter.java diff --git a/assignments/iterator_pattern/BreakfastMenu.java b/assignments/iterator_pattern/BreakfastMenu.java new file mode 100644 index 0000000..b091ba7 --- /dev/null +++ b/assignments/iterator_pattern/BreakfastMenu.java @@ -0,0 +1,23 @@ +package assignments.iterator_pattern; + +import java.util.List; + +//Concrete Iterable Menu w/ ArrayList +public class BreakfastMenu implements Menu { + private List items; + + public BreakfastMenu(List items) { + this.items = items; + } + + @Override + public void addItem(String name, String description, boolean vegetarian, double price) { + MenuItem item = new MenuItem(name, description, vegetarian, price); + items.add(item); + } + + @Override + public BreakfastMenuIterator createIterator() { + return new BreakfastMenuIterator(items); + } +} \ No newline at end of file diff --git a/assignments/iterator_pattern/BreakfastMenuIterator.java b/assignments/iterator_pattern/BreakfastMenuIterator.java new file mode 100644 index 0000000..8592569 --- /dev/null +++ b/assignments/iterator_pattern/BreakfastMenuIterator.java @@ -0,0 +1,28 @@ +package assignments.iterator_pattern; + +import java.util.List; +import java.util.NoSuchElementException; + +//Concrete Iterator for Breakfast +public class BreakfastMenuIterator implements MyIterator { + private int currentIndex = 0; + private List menuItems; + + public BreakfastMenuIterator(List menuItems) { + this.menuItems = menuItems; + } + + @Override + public boolean hasNext() { + return currentIndex < menuItems.size(); + } + + @Override + public MenuItem next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + + return menuItems.get(currentIndex++); + } +} diff --git a/assignments/iterator_pattern/DinnerMenu.java b/assignments/iterator_pattern/DinnerMenu.java new file mode 100644 index 0000000..7192918 --- /dev/null +++ b/assignments/iterator_pattern/DinnerMenu.java @@ -0,0 +1,30 @@ +package assignments.iterator_pattern; + +//Concrete Iterable w/ Array +public class DinnerMenu implements Menu { + private int capacity = 0; + private MenuItem[] items = new MenuItem[capacity]; + + public DinnerMenu(MenuItem[] items) { + this.items = items; + } + + @Override + public void addItem(String name, String description, boolean vegetarian, double price) { + MenuItem item = new MenuItem(name, description, vegetarian, price); + MenuItem[] increase = new MenuItem[capacity + 1]; + + for (int i = 0; i < increase.length; i++) { + if (i != increase.length) { + increase[i] = items[i]; + } else { + increase[i] = item; + } + } + } + + @Override + public DinnerMenuIterator createIterator() { + return new DinnerMenuIterator(items); + } +} diff --git a/assignments/iterator_pattern/DinnerMenuIterator.java b/assignments/iterator_pattern/DinnerMenuIterator.java new file mode 100644 index 0000000..f2a1f34 --- /dev/null +++ b/assignments/iterator_pattern/DinnerMenuIterator.java @@ -0,0 +1,31 @@ +package assignments.iterator_pattern; + +import java.util.NoSuchElementException; + +//Concrete Iterator for Dinner +public class DinnerMenuIterator implements MyIterator { + private int currentIndex = 0; + private MenuItem[] menuItems; + + public DinnerMenuIterator(MenuItem[] menuItems) { + this.menuItems = menuItems; + } + + @Override + public boolean hasNext() { + return currentIndex < menuItems.length; + } + + @Override + public MenuItem next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + + MenuItem returnItem = menuItems[currentIndex]; + + currentIndex += 1; + + return returnItem; + } +} \ No newline at end of file diff --git a/assignments/iterator_pattern/Menu.java b/assignments/iterator_pattern/Menu.java new file mode 100644 index 0000000..fb51e8b --- /dev/null +++ b/assignments/iterator_pattern/Menu.java @@ -0,0 +1,8 @@ +package assignments.iterator_pattern; + +//Menu Interface for Iterable Menus +public interface Menu { + public void addItem(String name, String description, boolean vegetarian, double price); + + public MyIterator createIterator(); +} diff --git a/assignments/iterator_pattern/MenuItem.java b/assignments/iterator_pattern/MenuItem.java new file mode 100644 index 0000000..50e1d08 --- /dev/null +++ b/assignments/iterator_pattern/MenuItem.java @@ -0,0 +1,32 @@ +package assignments.iterator_pattern; + +//Class for menu item +public class MenuItem { + String name; + String description; + boolean vegetarian; + 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 double getPrice() { + return price; + } + + public boolean isVegertarian() { + return vegetarian; + } +} \ No newline at end of file diff --git a/assignments/iterator_pattern/MenuTest.java b/assignments/iterator_pattern/MenuTest.java new file mode 100644 index 0000000..24e1cbc --- /dev/null +++ b/assignments/iterator_pattern/MenuTest.java @@ -0,0 +1,24 @@ +package assignments.iterator_pattern; + +import java.util.ArrayList; +import java.util.List; + +//Main +public class MenuTest { + public static void main(String[] args) { + List breakfastList = new ArrayList<>(); + + breakfastList.add(new MenuItem("Pancakes", "Sweet Circle Bread", false, 10)); + breakfastList.add(new MenuItem("Eggs", "Non-Meat Protein", false, 8)); + + Menu dinnerMenu = new DinnerMenu(new MenuItem[] { + new MenuItem("Sushi", "Fish", false, 10), + new MenuItem("Chicken Tenders", "Battered Chicken", false, 10) + }); + + Menu breakfastMenu = new BreakfastMenu(breakfastList); + Waiter waiter = new Waiter(breakfastMenu, dinnerMenu); // Client + + waiter.printMenu(); + } +} diff --git a/assignments/iterator_pattern/MyIterator.java b/assignments/iterator_pattern/MyIterator.java new file mode 100644 index 0000000..5126c0e --- /dev/null +++ b/assignments/iterator_pattern/MyIterator.java @@ -0,0 +1,8 @@ +package assignments.iterator_pattern; + +//Iterator Interface +public interface MyIterator { + public boolean hasNext(); + + public MenuItem next(); +} \ No newline at end of file diff --git a/assignments/iterator_pattern/Waiter.java b/assignments/iterator_pattern/Waiter.java new file mode 100644 index 0000000..e68f63b --- /dev/null +++ b/assignments/iterator_pattern/Waiter.java @@ -0,0 +1,34 @@ +package assignments.iterator_pattern; + +// The Client +public class Waiter { + private Menu breakfastMenu; + private Menu dinnerMenu; + + public Waiter(Menu breakfastMenu, Menu dinnerMenu) { + this.breakfastMenu = breakfastMenu; + this.dinnerMenu = dinnerMenu; + } + + public void printMenu() { + System.out.println("------ Breakfast ------"); + printMenu(breakfastMenu.createIterator()); + System.out.println("------ Dinner ------"); + printMenu(dinnerMenu.createIterator()); + } + + public void printMenu(MyIterator myIterator) { + while (myIterator.hasNext()) { + MenuItem item = myIterator.next(); + System.out.println("Item: " + item.getName()); + System.out.println("Description: " + item.getDescription()); + System.out.println("Price: $" + item.getPrice()); + if (item.isVegertarian() == true) { + System.out.println("Vegetarian: Yes"); + } else { + System.out.println("Vegetarian: No"); + } + System.out.println(); + } + } +} \ No newline at end of file