基本上,所有类都派生自一个基类,Element
但是在任何给定时刻,该结构都可以包含任何派生元素。
访问者应该以几种不同的样式打印元素,并实现 interface ElementVisitor
。
是否可以在访问者界面中不指定所有派生类型的情况下实现访问者模式?
如果不是,那么考虑到这一点,还有什么是替代方案,Element
并且ElementVisitor
是我们应该能够随时扩展但不能随时编辑的框架级组件。
任何Element
时候都可以这样:accept
List<ElementVisitor>
class Element
{
public void accept(List<ElementVisitor> actions) {
foreach(ElementVisitor action : actions)
{
action.visit(this);
}
}
}
注意:该框架仍处于生产阶段,因此如果访问者模式不允许,仍然可以更改设计。
这是instanceof
解决这个问题的唯一方法吗?我可以查看哪些其他替代方案?