• ,

test.level27.lesson15.big01 Задача 2

****************************************************************
Задание 2
1. Мы много работаем с консолью. Пора создать единую точку взаимодействия.
Создайте класс ConsoleHelper с единственным BufferedReader, через который будете работать с консолью.
Запомните, этот класс не хранит никаких данных и состояний, поэтому все методы будут статическими.
Создайте в нем три метода:
-writeMessage(String message) — для вывода message в консоль
-String readString() — для чтения строки с консоли
-ListgetAllDishesForOrder() — просит ползователя выбрать блюдо и добавляет его в список. Введенное 'exit' означает завершение заказа.
исключения пробрасывайте выше, на этом уровне не понятно, что с ними делать.

2. Отрефакторьте код — работа с консолью должна быть только через класс ConsoleHelper

3. Вернемся к классу Order: в нем есть ссылка на планшет, и еще есть список выбранных блюд.
Создайте поле dishes — список блюд. Инициализируйте его в конструкторе, вызвав метод getAllDishesForOrder из ConsoleHelper.

4. Перепишите метод toString в классе Order. Пусть он возвращает пустую строку, если нет блюд в заказе, иначе
вывод должен быть аналогичный примеру в порядке добавления блюд. Используйте ConsoleHelper.
Пример:
Your order: [Juice, Fish] of Tablet{number=5}

5. У нас все завязано на работу с консолью. Однако, при возникновении исключений, наше приложение умрет.
Чтобы узнать причину — добавим в Tablet статический логгер java.util.logging.Logger, инициализированный именем класса.

6. В методе createOrder класса Tablet обработаем исключения ввода-вывода.
Запишем в лог «Console is unavailable.». Уровень лога — SEVERE — это самый серьезный уровень, мы не можем работать.

7. Надо начинать тестировать наше приложение.
Добавьте в main создание планшета и создание заказа — new Tablet(5).createOrder();

Dish

package com.javarush.test.level27.lesson15.big01.kitchen;

public enum Dish {
    Fish, Steak, Soup, Juice, Water;

    public static String allDishesToString(){
        StringBuilder sb = new StringBuilder();
        for(Dish dish : Dish.values()){
            sb.append(dish.toString()+", ");
        }
        return sb.substring(0, sb.length()-2);
    }

}


Order

package com.javarush.test.level27.lesson15.big01.kitchen;


import com.javarush.test.level27.lesson15.big01.ConsoleHelper;
import com.javarush.test.level27.lesson15.big01.Tablet;

import java.io.IOException;
import java.util.List;

public class Order {
    private List<Dish> dishes;
    private Tablet tablet;

    public Order(Tablet tablet) throws IOException {
        this.dishes = ConsoleHelper.getAllDishesForOrder();
        this.tablet = tablet;
    }

    @Override
    public String toString() {
        if(dishes.isEmpty())
            return "";
        else
            return "Your order: " + dishes + " of " + tablet;
    }
}


ConsoleHelper


package com.javarush.test.level27.lesson15.big01;

import com.javarush.test.level27.lesson15.big01.kitchen.Dish;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class ConsoleHelper {
    static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    public static void writeMessage(String message){
        System.out.println(message);
    }

    public static String readString()  throws IOException {
        return reader.readLine();
    }

    public static List<Dish> getAllDishesForOrder() throws IOException, IllegalArgumentException {
        List<Dish> dishes = new ArrayList<>();
        writeMessage("Please, choose the dish, in case to exit enter 'exit':");
        String dish;
        while(true){
            dish = readString();
            if(dish.equalsIgnoreCase("exit"))
                break;
            dishes.add(Dish.valueOf(dish));
        }
        return dishes;
    }
}


Restaurant

package com.javarush.test.level27.lesson15.big01;

public class Restaurant {
    public static void main(String[] args) {
        new Tablet(5).createOrder();
    }
}


Tablet

ackage com.javarush.test.level27.lesson15.big01;
 import com.javarush.test.level27.lesson15.big01.kitchen.Order;

 import java.io.IOException;
 import java.util.logging.Level;
 import java.util.logging.Logger;

public class Tablet {
    private final int number;
    public static Logger logger = Logger.getLogger(Tablet.class.getName());

    public Tablet(int number) {
        this.number = number;
    }

    public void createOrder(){
        try {
            Order order = new Order(this);
            ConsoleHelper.writeMessage(order.toString());
        } catch (IOException e) {
            logger.log(Level.SEVERE, "Console is unavailable.");
        }
    }

    @Override
    public String toString() {
        return "Tablet{" + "number=" + number + "}";
    }
}

2 комментария

Skiras
UP
nataliadrozdz
у меня на удивление быстро прошел (относительно). Отличие от Вашего кода в следующих местах:
-вывод на консоль более громоздкий. Создаю StringBuilder и туда добавляю все части по отдельности. В том числе прохожусь по каждому элементу списка и отдельно добавляю.
-когда создаю заказ, вывожу на консоль все возможные для заказа блюда.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.