В записи данных приложения я разрешаю пользователю вставить числовое значение, которое может представлять две разные вещи:
- абсолютное значение, скажем 5, означающее, что свойству P должно быть присвоено значение 5
- относительное значение, скажем +5, означающее, что свойство P должно быть увеличено на 5
Мой вопрос: какую структуру данных использовать для хранения этой информации?
Я предлагаю несколько альтернатив.
Моя идея идет с 3-й идеей, но мне интересно, что шаблон "правильный".
1)
Здесь абсолютное значение x или значение приращения присваивается, а другое значение равно нулю. Не очень удовлетворительно.
class DoubleFieldBased {
Integer absolute;
Integer increment;
}
2)
Здесь «величина» значения сохраняется в «значение», а логическое «приращение» сообщает, является ли значение абсолютным или относительным. Еще менее удовлетворительно.
class FieldAndBoolean {
Integer value;
boolean increment;
}
3) Здесь я переместил фокус на метод applyValue, который использует полиморфизм и делает правильные вещи, основываясь на неявной информации о том, какой класс «я». Удовлетворительно, но немного сложно, и я подозреваю, что картина не идеальна.
public static abstract class AbstractValue {
int myvalue;
public AbstractValue (int myvalue) {this.myvalue = myvalue;}
public abstract int applyValue (int value);
}
public static class Absolute extends AbstractValue {
public Absolute (int myvalue) {super(myvalue);}
public int applyValue (int value) {
return value;
}
}
public static class Incremental extends AbstractValue {
public Incremental (int myvalue) {super(myvalue);}
public int applyValue(int value) {
return myvalue + value;
}
}