У меня есть класс под названием GoogleWeather, я хочу преобразовать его в другой класс CustomWeather
является любой шаблон проектирования, который поможет вам преобразовать классы?
Шаблон проектирования для преобразования класса в другой
Ответ 1
Существует одно важное решение:
Вам нужен объект, который генерируется преобразованием, чтобы отражать будущие изменения исходного объекта?
Если вам не нужны такие функции, то самый простой подход - использовать класс утилиты со статическими методами, которые создают новый объект на основе полей исходного объекта, как указано в других ответах.
С другой стороны, если вам нужен преобразованный объект для отражения изменений в исходном объекте, вам, вероятно, понадобится что-то по строкам шаблон дизайна адаптера:
public class GoogleWeather {
...
public int getTemperatureCelcius() {
...
}
...
}
public interface CustomWeather {
...
public int getTemperatureKelvin();
...
}
public class GoogleWeatherAdapter implements CustomWeather {
private GoogleWeather weather;
...
public int getTemperatureKelvin() {
return this.weather.getTemperatureCelcius + 273;
}
...
}
Ответ 2
В этом случае я бы использовал класс Mapper с кучей статических методов:
public final class Mapper {
public static GoogleWeather from(CustomWeather customWeather) {
GoogleWeather weather = new GoogleWeather();
// set the properties based on customWeather
return weather;
}
public static CustomWeather from(GoogleWeather googleWeather) {
CustomWeather weather = new CustomWeather();
// set the properties based on googleWeather
return weather;
}
}
Таким образом, у вас нет зависимостей между классами.
Использование образца:
CustomWeather weather = Mapper.from(getGoogleWeather());
Ответ 3
Кроме того, вы также можете использовать новую функцию Java8 "Функция" из java.util.function.
Более подробное объяснение представлено в http://www.leveluplunch.com/java/tutorials/016-transform-object-class-into-another-type-java8/. Пожалуйста, смотрите!