public class Solution {
public static void main(String[] args) throws Exception {
//ввести с консоли несколько ключей (строк), пункт 7
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String s = reader.readLine();
if (s.equals("soapOpera") || s.equals("cartoon") || s.equals("thriller")) {
Movie movie = MovieFactory.getMovie(s);
System.out.println(movie.getClass().getSimpleName());
} else {
MovieFactory.getMovie(s);
break;
}
}
/*
8 Создать переменную movie класса Movie и для каждой введенной строки(ключа):
8.1 получить объект используя MovieFactory.getMovie и присвоить его переменной movie
8.2 вывести на экран movie.getClass().getSimpleName()
*/
}
static class MovieFactory {
static Movie getMovie(String key) {
Movie movie = null;
//создание объекта SoapOpera (мыльная опера) для ключа "soapOpera"
if ("soapOpera".equals(key)) {
movie = new SoapOpera();
} else if ("cartoon".equals(key)) {
movie = new Cartoon();
} else if ("thriller".equals(key)) {
movie = new Thriller();
}
//напишите тут ваш код, пункты 5,6
return movie;
}
}
static abstract class Movie {
}
static class SoapOpera extends Movie {
}
static class Cartoon extends Movie {
}
static class Thriller extends Movie {
}
//Напишите тут ваши классы, пункт 3
}
Ihor
17 уровень
Задачу решил, но остался вопрос. Зачем нам нужно предпоследнее условие? И как она работает? Насколько я понял, если ключ не соответствует ни одному подходящему значению, объект создаваться не будет.
Решен
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Wladyslaw Java Developer Master
30 декабря 2019, 18:48
В твоей реализации - чтобы прервать цикл. Метод фабрики можно было не вызывать, он вернет нулл, если речь об этом
Или о каком условии речь? 0
Ihor
30 декабря 2019, 18:53
"Для каждой введенной строки (в том числе для некорректной) необходимо вызвать метод MovieFactory.getMovie." - я говорю об этом условии.
а без этого else задаче не проходила проверку. Вопрос как раз в том и заключается, зачем нам нужно возвращать нулл?
0
Wladyslaw Java Developer Master
30 декабря 2019, 18:56решение
А, понял, через веб этого условия не видно.
Видимо чтобы показать суть паттерна. Тебе не нужно самому проверять корректность ключа - просто отдай его фабрике и посмотри что выйдет. Насколько я его понимаю - он как-раз для того и придуман чтобы в других местах ты его просто дернул и не распространялся на тему того какой именно объект тебе нужен. У меня, например, вот так было
А так выходит - двойная проверка.
У меня там в методе такая же, в общем-то, но сейчас я бы написал иначе - просто прервал цикл как только получил бы нулл
Вот примерно как люди из "Помощи" пишут. Ну, разве что в рамках задачи можно сразу в консоль писать и коллекция не нужна
+3
Ihor
30 декабря 2019, 19:06
Да, теперь вижу. Это для того, что бы можно было дополнять фабрику классами, и при этом не приходилось дописывать дополнительную проверку в if
А у меня изначально решение заточено только под эти три условия) Спасибо)
п.с. Это паттерн фабричный метод? 0
Wladyslaw Java Developer Master
30 декабря 2019, 19:09
Скорее просто Factory
Factory Method вроде как немного иначе реализуют.
А может это таки одно и тоже, просто какая-то нестыковка в терминологии разных источников и реализациях. Нужно гуглить, в общем.
Судя по всему - так и есть
(also known as the “Factory Design Pattern” and “Factory Method”)
Кстати очень рекомендую, доступно, информативно и вообще.
+1
Ihor
30 декабря 2019, 19:16
Спасибо за полезную информацию👍
0