在任何Wicket转发器组件中,基于模型对象类使用不同组件类的常见模式是什么?我目前的方法是这样的,但我想有一种更好的解决方案:
BaseClass
|- AClass
|- BClass
`- CClass
protected void populateItem(Item<BaseClass> item) {
BaseClass obj = item.getModelObject();
if (obj instanceof AClass) {
item.add(new APanel("content", Model.of((AClass) obj)));
} else if (obj instanceof BClass) {
item.add(new BPanel("content", Model.of((BClass) obj)));
} else if (obj instanceof CClass) {
item.add(new CPanel("content", Model.of((CClass) obj)));
}
}
答案 0 :(得分:2)
您可以使用主页外部的工厂模式。工厂中的代码看起来与您已有的代码类似。
protected void populateItem(Item<BaseClass> item) {
item.add(PanelFactory.getPanel("content", item.getModelObject());
}