0
我有一个对象为一个工厂保留天气测量。重构详细开关案例陈述
public class FactoryWeather {
// each measurement consists of min, max and average observations.
private Measurement temperature;
private Measurement humidity;
private Measurement ...
public constructor,setters/getters...
}
测量类型被定义为枚举象下面这样:
public void updateWeatherMeasurement(String type, Measurement measurement, FactoryWeather factory) {
WeatherMeasurementEnum m = WeatherMeasurementEnum(type.toUpperCase());
if(!m.isValid(measurement.getAverage())
throw new AppException("Invalid measurement!");
switch(m) {
case TEMPERATURE: factory.setTemperature(measurement);break;
case HUMIDITY: factory.setHumidity(measurement);break;
...
}
}
虽然switch语句可能看起来细,类型:
public enum WeatherMeasurementEnum {
// min and max range of single measurement
TEMPERATURE(-50,50),
HUMIDITY(0,100),
...
// validity check for measurements
public boolean isValid(int average) {
return average >= minimum && average <= maximum;
}
}
最后,我使用下面的方法来更新每个测量测量可以在将来增长。考虑到这一点以及最佳实践的缘故,是否可以消除这种长时间切换或if/else语句?
您是否了解了Stategy模式? –
我不认为你已经告诉我足够多,我可以说这是否会工作,但我会传达这个想法:在WeatherMeasurementEnum中添加一个方法setMeasuremet(FactoryWeather),然后调用正确的方法工厂。它需要枚举中的抽象方法和每个枚举实例中的实现。 –