Questions tagged «visitor»

5
访客模式中的accept()方法有什么意义?
关于将算法与类分离的讨论很多。但是,一件事搁置不明。 他们这样使用访客 abstract class Expr { public <T> T accept(Visitor<T> visitor) {visitor.visit(this);} } class ExprVisitor extends Visitor{ public Integer visit(Num num) { return num.value; } public Integer visit(Sum sum) { return sum.getLeft().accept(this) + sum.getRight().accept(this); } public Integer visit(Prod prod) { return prod.getLeft().accept(this) * prod.getRight().accept(this); } 访问者不是直接调用visit(element),而是要求元素调用其visit方法。它与已宣布的关于访客的阶级不了解的思想相矛盾。 PS1请用您自己的文字解释或指向确切的解释。因为我得到的两个回答是关于一般性和不确定性的。 PS2我的猜测:由于getLeft()返回basic Expression,因此调用visit(getLeft())将导致visit(Expression),而getLeft()调用visit(this)将导致另一个更合适的访问调用。因此,accept()执行类型转换(aka转换)。 PS3 …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.