Подтвердить что ты не робот

Шаблон проектирования для преобразования класса в другой

У меня есть класс под названием GoogleWeather, я хочу преобразовать его в другой класс CustomWeather
является любой шаблон проектирования, который поможет вам преобразовать классы?

4b9b3361

Ответ 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());