47

我有一个名为 GoogleWeather 的类,我想将它转换为另一个类 CustomWeather。

是否有任何设计模式可以帮助您转换类?

4

3 回答 3

64

在那种情况下,我会使用带有一堆静态方法的 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());
于 2012-08-06T16:20:44.727 回答
56

需要做出一个关键决定:

您是否需要转换生成的对象来反映对源对象的未来更改?

如果您不需要此类功能,那么最简单的方法是使用具有静态方法的实用程序类,该方法根据源对象的字段创建新对象,如其他答案中所述。

另一方面,如果您需要转换后的对象来反映对源对象的更改,您可能需要一些符合适配器设计模式的东西:

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;
    }
    ...
}
于 2012-08-06T19:57:44.387 回答
8

此外,您还可以使用来自 java.util.function 的新 Java8 功能 'Function'。

http://www.leveluplunch.com/java/tutorials/016-transform-object-class-into-another-type-java8/中提供了更详细的解释。请看一看!

于 2015-11-30T16:58:27.020 回答