Factory method pattern

  • 18
  • Недоступна
1. Внимательно посмотри, какие классы у тебя есть. 2. В отдельных файлах в пакете common создай классы JpgReader, PngReader, BmpReader, которые реализуют интерфейс ImageReader. 3. В отдельном файле в основном пакете создай класс ImageReaderFactory с одним методом. 3.1. Подумай, как он должен называт
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (235)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Ягодин Артем Романович16 уровень, Москва
вчера, 10:33
Внимание спойлер! В конечном счете, по последнему пункту, валидатор принял только конструкцию типа if (parametr == null) { throw new IllegalArgumentException... } else { В итоге вопрос, в пункте условия 4.2 сказано: "4.2. Если передан неправильный параметр, то выбрасывать исключение", по решению, которое принял валидатор, получается что единственный неправильный параметр это null ? а как же все остальные неправильные варианты в рамках данного кода? Дайте пояснение, знающие.
Сэм Фишер18 уровень, Кишинев
21 сентября, 15:19
по паттернам рекомендую книгу Head First. Паттерны проектирования. там как раз все примеры на java
Andrii Plishchuk22 уровень, Киев
20 августа, 15:17
Задача класс. Валидатор говно!!! У него проблема со switch case.
Василий Бабин27 уровень, Москва
18 сентября, 16:00
Нет проблем. Я сделал через switch без проблем.
Fischerski19 уровень, Москва
3 августа, 09:11
Сколько не возвращался к теме статиков, так и до конца понять не могу их. В данном случае не понятно почему метод getImageReader должен быть статичным, геттеры вроде раньше не объявляли статичными. Или в данном случае это нужно из-за того что метод используется в методе main который в свою очередь статичен?
Дмитрий Яковенко19 уровень, Москва
5 августа, 15:31
По поводу getImageReader - в данном случае это не геттер, а фабричный метод. Геттер - возвращает тебе какие-то данные из уже созданного экземпляра объекта. Фабричный метод, так же как и конструктор - создаёт объект. Но! Конструктор создаёт экземпляр такого же класса что и конструктор, а фабричный метод - какого-то другого класса. То есть фабричный метод - это обёртка вокруг нескольких чужих конструторов. В данном случае фабричный метод класса ImageReaderFactory создаёт экземпляр одного из трёх классов: BmpReader, JpgReader или PngReader. А так, как ты хочешь создавать экземпляры других классов - неплохо бы иметь доступ к фабричному методу всегда, без создания экземпляра самой фабрики. Поэтому фабричный метод разумно делать статичным. Вот тут чуть подробнее про фабричный метод.
Дмитрий Яковенко19 уровень, Москва
5 августа, 15:46
Немного напутал в терминологии, но не суть важно. То что мы видим в задаче - это паттерн Простая фабрика, когда есть один класс, в котором есть метод создающий другие объекты по некоторому условию. Фабричный метод - это когда вместо условия для создания объектов - делают подкласс от изначального объекта. Чуть подробнее о сравнении разных фабрик.
Fischerski19 уровень, Москва
5 августа, 17:12
Спасибо большое, стало гораздо понятнее. И кстати статьи очень хорошие, по началу был совсем не понятен код, я только потом понял что в статье используется не java синтаксис. Это вроде бы C#? Посмотрев примеры java кода, стало гораздо понятнее.
Sergey22 уровень, Ярославль
12 августа, 11:04
Догадаться, что метод должен быть static можно по тому, что в классе Solution он вызывается не у объекта, а у класса (имена объектов с маленькой буквы, имена классов с большой).
Василий Бабин27 уровень, Москва
18 сентября, 16:08
static метод относиться к классу и он один для всех его объектов. Если он изменяется, то у всех объектах он тоже изменяется. static можно вызывать без создания объектов напрямую чрез класс. Поэтому тут не создаётся объект класса и вызывается из класса напрямую. Эта логика также обратна, если мы видим вызов метода без объекта, а напрямую по названию класс, значит метод static.
Fischerski19 уровень, Москва
19 сентября, 18:46
Спасибо)
Bivian19 уровень, Краснодар
31 июля, 18:10
Поставил 1 звезду за отсутствие условия: "Если методу getImageReader передать null, выбросить IllegalArgumentException вместо NullPointerException". У меня другой вопрос - кто в здравом уме вообще передаёт null/что-либо ещё методам, принимающем enum'ы?
Михаил Клименко19 уровень, Краснодар
3 августа, 15:03
Накидал всех звезд, какие есть , и добавил бы еще столько же за то, что научился правильно выкидывать исключения вместо return :)
Nikolay Pirozhkov22 уровень, Санкт-Петербург
28 июля, 13:49
Шаблоны Java. FactoryMethod https://youtu.be/TwIjjTC5g7g
Alexander Korzhov18 уровень, Минск
22 июля, 17:16
если делать через свич кейс, то для того, чтобы валидатор принял, надо написать:
if(types == null){throw new IllegalArgumentException("Неизвестный тип картинки");}
 else {//ваш код со свич кейсом}
Ice17 уровень, Одесса
29 августа, 11:42
else не обязательно. После throw функция завершится от слова совсем.
Павел 17 уровень, Подольск
11 сентября, 11:28
Сначала производится проверка на null, а потом только условие со свич кейсом. Два дня промучился из-за того, что делал наоборот.
Иван23 уровень, Нижний Новгород
11 июля, 07:41
Статья на Java Rush про enum направила на верный путь
Павел Полянский19 уровень, Москва
10 июля, 13:58
Всего эту задачу решили 18729 учеников.
Ice17 уровень, Одесса
29 августа, 11:49
19324
Mikhail Kuragin17 уровень, Красноярск
3 сентября, 14:16
19378