Я довольно новыми для Java и ниже мои картографа определения интерфейса:Factory Pattern, когда тип вывода отличается в Java
public interface CourseMapper {
Course map(JsonObject courseJson);
List<Course> map(JsonArray coursesJson);
}
public interface LocationMapper {
Location map(JsonObject locationJson);
List<Location> map(JsonArray locationsJson);
}
и ниже два класса:
public interface Location {
Long id();
String name();
Location mutate(Long id);
}
public interface Course {
Long id();
String name();
Course mutate(Long id);
}
Я необходимость основана на ключе (String), мне нужно вызвать соответствующую функцию map()
соответствующего Mapper
. Пример, если key=="location"
, мне нужно вызвать LocationMapper
, и если key=="course"
, мне нужно вызвать CourseMapper
(для gson Mapper) ...... и так далее.
Я попытался использовать шаблон Factory для этого же, но кажется, что то же самое не работает, когда Output имеет разный тип. Кто-нибудь знает, как добиться того же, без явного усложнения лестницы If-else.
«а ниже - два класса» - это интерфейсы, а не классы. – alfasin
, чтобы ваши экземпляры 'CourseMapper' и' LocationMapper' стали классами без гражданства? Я думаю, что окончательная стратегия зависит от этого фактора, так как вы не указали, хотите ли вы вызывать метод в тех же экземплярах или разных экземплярах для разных вызовов. Factory имеет смысл, когда вам нужны новые экземпляры для каждого вызова, и вы можете хранить эти экземпляры в карты, как указано в принятом ответе, если для каждого вызова не требуется создание нового экземпляра. –
Мне нужно иметь новые экземпляры для каждого вызова, поэтому я изменяю принятый ответ, чтобы вписаться в шаблон Factory, в основном генерики - это то, что я искал. –