Categorías
Design Patterns Stories

Patrón de diseño de Java: visitante

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);
	}
}
  Patrón de diseño de Java: comando

Producción:

La ciudad acepta visitantes.
¡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

javax.lang.model.element.AnnotationValue obviamente use el patrón Visitor, pero no se usa comúnmente en proyectos regulares.

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *