Design patterns 对这位来访者的思考
典型的访问者基本上是根据从accept(对象)开始的访问者类型来分派访问者 想象一个在集合界面上工作的访问者Design patterns 对这位来访者的思考,design-patterns,Design Patterns,典型的访问者基本上是根据从accept(对象)开始的访问者类型来分派访问者 想象一个在集合界面上工作的访问者 enum Visiting { STOP CONTINUE; } Visitor { accept( Object ); Visiting visit( Object ); Visiting visit( Map ); Visiting visit( List ); Visiting visit( Set ); Visiting visi
enum Visiting {
STOP
CONTINUE;
}
Visitor {
accept( Object );
Visiting visit( Object );
Visiting visit( Map );
Visiting visit( List );
Visiting visit( Set );
Visiting visit( Collection );
Visiting visit( ArrayList).
}
典型访问者中的>ArrayList<只会调用visit(List)。调用visit(Object)->visit(Collection)->visit(List)->visit(ArrayList)有什么好处吗。如果有任何访问
返回访问。停止未调用链中的下一个
有什么可能的论据会使这成为一个糟糕的选择
- (-)性能,而不是简单地根据类型调用一次访问整个链
- (+)易于集中基于某些超级类型的常见操作,无需重复
您使用访问者的方式错误,请参阅:您试图实现什么?访问者模式的要点是,子类实例根据自己的类型决定调用哪个
visit()
方法。因此,在本例中,如果ArrayList有一个accept(Visitor)
方法(但它没有),它将调用visit(ArrayList)
。accept()
方法位于已访问对象中,而不是访问者中。