Antes de decirme que ya hay una pregunta similar, sí, lo sé, he leído it. Pero la pregunta allí se centra en cuando, estoy interesado en por qué.¿Una buena razón para usar el patrón de diseño de visitante?
Entiendo cómo funcionan las cosas. El clásico animal, perro, gato ejemplo siempre funciona como un amuleto.
La cosa es este código
int main()
{
Cat c;
Sound theSound;
c.letsDo(&theSound);
}
parece tan natural para mí. ¿Por qué?
Quiero decir, sí, así que tengo mis modelos de Perros y Gatos indiferenciado (primera vez que utilice esa palabra en Inglés por cierto) porque la implementació real está oculto bajo la clase de sonido, pero no es tan sólo una forma de poner a prueba tu código? ¿No es suficiente el polimorfismo para hacer algo como esto?
Para mí la diferencia es que con el polimorfismo tienes que editar cada clase (pero el modelo sigue siendo el mismo, ¿no?) Mientras que solo tienes que editar una clase con el patrón de diseño del visitante.
Exactamente, el comportamiento puede ser implementado por un tercero. –
Ok, pero si defines el analizador para SQL, ¿no tienes ya tu definición de gramática? ¿Dónde están los casos de uso imprevistos? En realidad, ya que estamos hablando de análisis, ¿no debería ser un generador de analizador un ejemplo más apropiado? Ahí tienes una gramática arbitraria, entonces debes definir una clase de árbol genérico. – dierre
No se trata de la estructura del SQL. Se trata de cómo el cliente puede usar el resultado/resultado de su biblioteca. El ejemplo del analizador simplemente se usa porque es algo "clásico". Por cierto, si tiene una API totalmente genérica (nodos arbitrarios "tipo DOM") sin una estructura fija, es posible que esté mejor con el enfoque de acceso genérico en lugar del patrón de visitante. – Dirk