Wyjaśnienie wzoru gościa

Więc przeczytałem całą dokumentację dotyczącą wzorca Odwiedzającego i wciąż jestem bardzo zdezorientowany. Wziąłem ten przykład z innego pytania SO, czy ktoś mógłby mi pomóc zrozumieć? Na przykład, kiedy używamy wzoru projektu dla gości? Myślę, że zrozumiałem niektóre z nich, ale nie jestem w stanie zobaczyć większego obrazu. Skąd mam wiedzieć, kiedy mogę z niego korzystać?

<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