2

基本上,所有类都派生自一个基类,Element但是在任何给定时刻,该结构都可以包含任何派生元素。

访问者应该以几种不同的样式打印元素,并实现 interface ElementVisitor

是否可以在访问者界面中不指定所有派生类型的情况下实现访问者模式?

如果不是,那么考虑到这一点,还有什么是替代方案,Element并且ElementVisitor是我们应该能够随时扩展不能随时编辑的框架级组件。

任何Element时候都可以这样:acceptList<ElementVisitor>

class Element
{
    public void accept(List<ElementVisitor> actions) {
        foreach(ElementVisitor action : actions)
        {
            action.visit(this);
        }
    }
}

注意:该框架仍处于生产阶段,因此如果访问者模式不允许,仍然可以更改设计。

这是instanceof解决这个问题的唯一方法吗?我可以查看哪些其他替代方案?

4

1 回答 1

1

如果要经常扩展操作,访问者模式是一个不错的选择。但是,如果要经常扩展元素,这并不是最佳选择。至少只要访问者需要不包含在元素的共同祖先中的具体元素的功能。

如果通过访问者实现的操作往往比元素类更稳定,则最好将操作定义为祖先中的抽象方法或由所有具体元素实现的接口,而不是使用访问者模式。

于 2013-08-21T07:46:22.110 回答