我有一个代表Wicket基本页面的类,其中包括“返回”,“前进”和“取消”按钮。但并非所有页面都具有所有按钮,例如第一页显然没有“返回”按钮。
我的想法是定义一个通用的ActionHandler
public interface ActionHandler {
void perform();
}
并且让子类返回它们支持的操作:
public Derived extends BasicPage {
protected ActionHandler getForwardHandler() {
return new ActionHandler() {
void perform() {
doIt();
}
};
}
}
问题是:为什么不使用protected字段?
public Derived extends BasicPage {
protected forwardHandler = new ActionHandler() {
void perform() {
doIt();
}
};
}
另一种选择是不使用继承(在这里并没有真正的意义),而是从外部设置ActionHandlers:
Toolbar toolbar = new Toolbar();
toolbar.setForwardHandler(new ActionHandler() {
void perform() {
doIt();
}
});
我不使用诸如ForwardHandler和CancelHandler之类的接口是因为我想将处理程序传递给工具栏,该工具栏将ActionHandlers作为参数。或者您会将整个页面传递给工具栏,并让工具栏根据已实现的接口决定显示哪些按钮?这听起来对我来说像是糟糕的面向对象编程。
这个想法是并非每个页面都必须定义一个新的工具栏,但也许这样会更简单...