Advertisement
anushervon111

Untitled

May 6th, 2023
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.15 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.List;
  3.  
  4. interface IMenu {
  5.     void print();
  6.     String getName();
  7.     double getPrice();
  8. }
  9.  
  10. class MenuItem implements IMenu {
  11.     private String name;
  12.     private double price;
  13.  
  14.     public MenuItem(String name, double price) {
  15.         this.name = name;
  16.         this.price = price;
  17.     }
  18.  
  19.     @Override
  20.     public void print() {
  21.         System.out.println(String.format("%s, $%.1f", getName(), getPrice()));
  22.     }
  23.  
  24.     @Override
  25.     public String getName() {
  26.         return name;
  27.     }
  28.  
  29.     @Override
  30.     public double getPrice() {
  31.         return price;
  32.     }
  33. }
  34.  
  35. abstract class MenuItemDecorator implements IMenu {
  36.     protected IMenu menuItem;
  37.  
  38.     public MenuItemDecorator(IMenu menuItem) {
  39.         this.menuItem = menuItem;
  40.     }
  41.  
  42.     @Override
  43.     public abstract void print();
  44.  
  45.     @Override
  46.     public abstract String getName();
  47.  
  48.     @Override
  49.     public abstract double getPrice();
  50. }
  51.  
  52. class SpicyDecorator extends MenuItemDecorator {
  53.     public SpicyDecorator(IMenu menuItem) {
  54.         super(menuItem);
  55.     }
  56.  
  57.     @Override
  58.     public void print() {
  59.         menuItem.print(); // Here is the idea of using decorator
  60.         System.out.println("-- This item is spicy (+ $2)");
  61.     }
  62.  
  63.     @Override
  64.     public String getName() {
  65.         return menuItem.getName();
  66.     }
  67.  
  68.     @Override
  69.     public double getPrice() {
  70.         return menuItem.getPrice() + 2;
  71.     }
  72. }
  73.  
  74. class VegetarianDecorator extends MenuItemDecorator {
  75.     public VegetarianDecorator(IMenu menuItem) {
  76.         super(menuItem);
  77.     }
  78.  
  79.     @Override
  80.     public void print() {
  81.         menuItem.print();
  82.         System.out.println("-- This item is vegetarian (+ $4)");
  83.     }
  84.  
  85.     @Override
  86.     public String getName() {
  87.         return menuItem.getName();
  88.     }
  89.  
  90.     @Override
  91.     public double getPrice() {
  92.         return menuItem.getPrice() + 4;
  93.     }
  94. }
  95.  
  96. class CompositeMenu implements IMenu {
  97.     private String name;
  98.     private List<IMenu> menuItems;
  99.  
  100.     public CompositeMenu(String name) {
  101.         this.name = name;
  102.         this.menuItems = new ArrayList<>();
  103.     }
  104.  
  105.     public void addMenuItem(IMenu menuItem) {
  106.         menuItems.add(menuItem);
  107.     }
  108.  
  109.     public void removeMenuItem(IMenu menuItem) {
  110.         menuItems.remove(menuItem);
  111.     }
  112.  
  113.     @Override
  114.     public void print() {
  115.         System.out.println(String.format("%s [ $%.1f ]", getName(), getPrice()));
  116.  
  117.  
  118.         System.out.println("------------------------");
  119.         for (IMenu menuItem : menuItems) {
  120.             menuItem.print();
  121.             System.out.println();
  122.         }
  123.         System.out.println();
  124.     }
  125.  
  126.     @Override
  127.     public String getName() {
  128.         return name;
  129.     }
  130.  
  131.     @Override
  132.     public double getPrice() {
  133.         double price = 0;
  134.         for (IMenu menuItem : menuItems) {
  135.             price += menuItem.getPrice();
  136.  
  137.         }
  138.         return price;
  139.     }
  140. }
  141.  
  142. class Main {
  143.     public static void main(String[] args) {
  144.         // Create the menus
  145.         CompositeMenu mainMenu = new CompositeMenu("Main Menu");
  146.         CompositeMenu appetizerMenu = new CompositeMenu("Appetizer Menu");
  147.         CompositeMenu dessertMenu = new CompositeMenu("Dessert Menu");
  148.  
  149.         // Create the menu items
  150.         MenuItem garlicBread = new MenuItem("Garlic bread", 5.5);
  151.         MenuItem chickenWings = new MenuItem("Chicken wings", 12.5);
  152.         MenuItem tomatoSoup = new MenuItem("Tomato soup", 10.5);
  153.         MenuItem pie = new MenuItem("Pie", 4.5);
  154.         MenuItem iceCream = new MenuItem("Ice cream", 3.6);
  155.  
  156.         // Add the menu items to the menus
  157.         appetizerMenu.addMenuItem(new VegetarianDecorator(garlicBread));
  158.         appetizerMenu.addMenuItem(new SpicyDecorator(chickenWings));
  159.         appetizerMenu.addMenuItem(new VegetarianDecorator(new SpicyDecorator(tomatoSoup)));
  160.  
  161.         dessertMenu.addMenuItem(pie);
  162.         dessertMenu.addMenuItem(pie);
  163.         dessertMenu.addMenuItem(new SpicyDecorator(iceCream));
  164.  
  165.         mainMenu.addMenuItem(appetizerMenu);
  166.         mainMenu.addMenuItem(dessertMenu);
  167.  
  168.         // Print the menus
  169.         mainMenu.print();
  170.  
  171.     }
  172. }
  173.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement