Explicación del patrón de visitante

Así que he leído toda la documentación sobre el patrón de visitante, y todavía estoy muy confundido. Tomé este ejemplo de otra pregunta de SO, ¿podría alguien ayudarme a entender? Por ejemplo, ¿cuándo utilizamos un patrón de diseño de visitante? Creo que puedo haber entendido algo de eso, pero no puedo ver el panorama completo. ¿Cómo puedo saber cuándo puedo usarlo?

<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>

Respuestas a la pregunta(2)

Su respuesta a la pregunta