Qual é o ponto do método accept () no padrão Visitor?

Fala-se muito sobre separar os algoritmos das classes. Mas, uma coisa fica de lado não explicada. Eles usam visitante assim abstract class Expr { public <T> T accept(Visitor<T> visitor) {visitor.visit(this);} } class ExprVisitor extends Visitor{ public Integer visit(Num num) {...