在应用程序数据条目中,我允许用户插入一个可以代表两种不同内容的数值:
我的问题是:哪种数据结构用于存储此信息? 我放下了一些替代品。 我的想法是第三个想法,但我想知道这个模式是“正确的”。
1) 这里绝对xor是增量分配的,另一个是null。不太满意。
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;
}
}
答案 0 :(得分:1)
我会说使用整数或其他数字类型)和枚举,如下所示:
enum Type{
ABSOLUTE, INCREMENT, PERCENTAGE /* etc */
}
public class Value{
int /* or float */ numericValue;
Type type;
}
您甚至可以将枚举用作策略:
enum Type{
ABSOLUTE{
public int apply(int newValue, int oldValue){return newValue;}
}, INCREMENT{
public int apply(int newValue, int oldValue){return oldValue + newValue;}
} /* etc */
;
public abstract int apply(int newValue, int oldValue);
}