Вам нужен только один класс. Классы должны отличаться по поведению, а не по данным, вы даже не должны создавать два разных класса на основе разных данных. Это приносит бесполезное распространение класса. Другая конфигурация может быть предоставлена в конструкторе.
public interface Spacer {
public SpacerField getSpacer(int resolution);
}
public class MySpacer implements Spacer {
private Map<Integer, Integer> spacerSize;
public MySpacer(Map spacerSize<Integer, Integer>) {
this.spacerSize = spacerSize;
}
public SpacerField getSpacer(int resolution) {
Integer size = spacerSize.get(resolution);
if (size == null) {
throw new IllegalArgumentException("Invalid resolution: "
+ resolution);
}
return new SpacerField(size);
}
}
Это конфигурация, рекомендуется создавать эти экземпляры с помощью инфраструктуры внедрения зависимостей и внедрять экземпляры, где это необходимо, с помощью метода сеттеров.
Даже если вы не используете инфраструктуру внедрения зависимостей, вы можете сделать это самостоятельно и перейти в будущем. Вот как:
public class AClassThatUseSpacer {
private Spacer spacer;
public void setSpacer(Spacer spacer) {
this.spacer = spacer;
}
}
А когда вы его используете:
AClassThaUseSpacer anInstance = new AClassThatUseSpacer();
Map<Integer, Integer> spacerSize = new HashMap<Integer, Integer>();
spacerSize.put(360, 15);
spacerSize.put(460, 5);
anInstance.setSpacer(new MySpacer(spacerSize));