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),然後調用正確的方法工廠。它需要枚舉中的抽象方法和每個枚舉實例中的實現。 –