Explicação do padrão do visitante

Então eu li toda a documentação sobre o padrão Visitor, e ainda estou muito confuso. Tomei este exemplo de outra pergunta SO, alguém poderia me ajudar a entender? Por exemplo, quando usamos um padrão de design de visitante? Acho que posso ter entendido um pouco disso, mas simplesmente não consigo enxergar a foto maior. Como eu sei quando posso usá-lo?

<code>class equipmentVisited
{
  virtual void accept(equipmentVisitor* visitor) = 0;
}

class floppyDisk : public equipmentVisited
{
  virtual void accept(equipmentVisitor* visitor);
}

class processor : public equipmentVisited
{
  virtual void accept(equipmentVisitor* visitor);
}

class computer : public equipmentVisited
{
  virtual void accept(equipmentVisitor* visitor);
}

class equipmentVisitor
{
  virtual void visitFloppyDisk(floppyDisk* );
  virtual void visitProcessor(processor* );
  virtual void visitComputer(computer* );
}

// Some additional classes inheriting from equipmentVisitor would be here

equipmentVisited* visited;
equipmentVisitor* visitor;

// Here you initialise visited and visitor in any convenient way

visited->accept(visitor);
</code>

questionAnswers(2)

yourAnswerToTheQuestion