단일 공장에 대한 날씨 측정을 유지하는 객체가 있습니다.자세한 스위치 케이스 설명 리펙터링
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;
...
}
}
: 마지막으로
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 Pattern에 대해 알게 되셨습니까? –
필자는이 방법이 효과가있을 것이라고 말할 수있을만큼 충분히 말하지는 않았지만 아이디어를 발표 할 것입니다 : WeatherMeasurementEnum에 setMeasurement (FactoryWeather) 메소드를 추가합니다. 공장. enum에 추상 메소드가 필요하고 각 enum 인스턴스에 구현이 필요합니다. –