我有一个名为 GoogleWeather 的类,我想将它转换为另一个类 CustomWeather。
是否有任何设计模式可以帮助您转换类?
在那种情况下,我会使用带有一堆静态方法的 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());
需要做出一个关键决定:
您是否需要转换生成的对象来反映对源对象的未来更改?
如果您不需要此类功能,那么最简单的方法是使用具有静态方法的实用程序类,该方法根据源对象的字段创建新对象,如其他答案中所述。
另一方面,如果您需要转换后的对象来反映对源对象的更改,您可能需要一些符合适配器设计模式的东西:
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;
}
...
}
此外,您还可以使用来自 java.util.function 的新 Java8 功能 'Function'。
http://www.leveluplunch.com/java/tutorials/016-transform-object-class-into-another-type-java8/中提供了更详细的解释。请看一看!