我有这样一段代码从GWT在行动“的instanceof”到重载方法解决:重构一些代码在Java
public void processOperator(final AbstractOperator op) {
System.out.println("Wordt deze ooit aangeroepen?");
if (op instanceof BinaryOperator) {
if ((data.getLastOperator() == null) || (data.isLastOpEquals())) {
data.setBuffer(Double.parseDouble(data.getDisplay()));
data.setInitDisplay(true);
} else {
data.getLastOperator().operate(data);
}
data.setLastOperator(op);
} else if (op instanceof UnaryOperator) {
op.operate(data);
}
data.setLastOpEquals(false);
}
我想通过使用方法调度,以消除“的instanceof”部分:
public void processOperator(final BinaryOperator op) {
if ((data.getLastOperator() == null) || (data.isLastOpEquals())) {
data.setBuffer(Double.parseDouble(data.getDisplay()));
data.setInitDisplay(true);
} else {
data.getLastOperator().operate(data);
}
data.setLastOperator(op);
data.setLastOpEquals(false);
}
public void processOperator(final UnaryOperator op) {
op.operate(data);
data.setLastOpEquals(false);
}
但是现在我在类ButtonOperator的代码中遇到了麻烦。以下代码将AbstractOperator作为构造函数中的一个类型。 UnaryOperator和BinaryOperator类型的代码看起来完全一样,因此需要为包含完全相同的代码的特殊构造函数编写一些麻烦的代码。什么是更好的方法?
public ButtonOperator(final CalculatorController controller,
final AbstractOperator op) {
super(op.label);
this.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
controller.processOperator(op);
}
});
this.setStyleName(CalculatorConstants.STYLE_BUTTON);
}
+ 1用于暗示在“解析树”或“表达评估”中作为典型方法的访问者模式。 – 2011-06-01 12:54:15