我有這樣一段代碼從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