El patrón de visitante es un patrón de diseño que se usa comúnmente en el analizador de un compilador, como Eclipse JDT AST Parser.
Básicamente, hay dos interfaces – Visitante y Elemento – en el patrón Visitante.
Historia de patrón de visitante
Supongamos que un visitante por primera vez llega a la ciudad de Nueva York. Quiere visitar la ciudad y la ciudad acepta su visita. Una vez que el visitante comienza a visitar, automáticamente visita todo y no necesita llamar a un método cuando quiere ir a un museo. ¡El viaje es un paquete!
Diagrama de clases de patrón de visitante
Pasos del patrón de visitante
Este diagrama muestra los pasos de la visita.
El proceso de trabajo es como el siguiente:
1. Se crean un visitante FirstTimeVisitor y un elemento City.
2. El programa comienza con «La ciudad acepta un visitante».
3. El método de aceptación en City define que permite que este visitante visite.
4. El visitante aceptado llama a su método sobrecargado «visita» para visitar esta ciudad.
Patrón de visitante código Java
import java.util.ArrayList; interface Visitor { public void visit(City city); public void visit(Museum museum); public void visit(Park park); } class FirstTimeVisitor implements Visitor { @Override public void visit(City city) { System.out.println("I'm visiting the city!"); } @Override public void visit(Museum museum) { System.out.println("I'm visiting the Museum!"); } @Override public void visit(Park park) { System.out.println("I'm visiting the Park!"); } } interface Element { public void accept(Visitor visitor); } class City implements Element { ArrayList<Element> places = new ArrayList<Element>(); public City() { places.add(new Museum()); places.add(new Park()); } @Override public void accept(Visitor visitor) { System.out.println("City is accepting visitor."); visitor.visit(this); for (Element e : places) { e.accept(visitor); } } } class Museum implements Element { @Override public void accept(Visitor visitor) { System.out.println("Museum is accepting visitor."); visitor.visit(this); } } class Park implements Element { @Override public void accept(Visitor visitor) { System.out.println("Park is accepting visitor."); visitor.visit(this); } } public class TestVisitor { public static void main(String[] args) { FirstTimeVisitor visitor = new FirstTimeVisitor(); City city = new City(); city.accept(visitor); } } |
Producción:
¡Estoy visitando la ciudad!
El museo está aceptando visitantes.
¡Estoy visitando el museo!
El parque acepta visitantes.
¡Estoy visitando el parque!
Patrón de visitante en JDK