Definición del visitante: una operación que actúa sobre cada objeto en un determinado grupo de objetos. Le permite definir nuevas operaciones que actúan sobre estos objetos sin cambiarlos ellos mismos.
En Java, el patrón de visitantes en realidad separa los elementos en la estructura de la recolección y el comportamiento de operar en estos elementos.
Por qué usar el modo de visitante
La colección Java (incluida la vector y la hashtable) es la tecnología que usamos con mayor frecuencia, pero la colección parece ser un gran IVA de tintura negro. Entonces debemos usar si juzgaremos, como:
La copia del código es la siguiente:
Iterador iterator = colección.iterator ()
while (iterator.hasnext ()) {
Objeto o = iterator.next ();
if (o instancia de colección)
MessyPrintCollection ((colección) O);
más if (o instancia de cadena)
System.out.println ("'"+O.ToString ()+"'");
más si (o instancia de flotación)
System.out.println (O.ToString ()+"f");
demás
System.out.println (O.ToString ());
}
En el ejemplo anterior, utilizamos instancia para determinar el tipo de o.
Obviamente, las desventajas de hacer esto si más si el código es engorroso, podemos resolverlo usando el modo de visitante.
Cómo usar el modo de visitante
Para el ejemplo anterior, diseñamos un visitante de visitante de interfaz:
La copia del código es la siguiente:
Visitante de la interfaz pública
{
Public void VisitCollection (colección de colección);
public void VisitString (cadena de cadena);
Public Void Visitfloat (Float Float);
}
En esta interfaz, coloque los tipos de clases, creemos que la colección es posible.
Con los visitantes, debemos ser visitados. No le da la bienvenida, el visitante no podrá visitar).
Definimos esta interfaz como visitable, que es definir una operación de aceptación, es decir, hacer que cada elemento de la colección sea accesible.
La copia del código es la siguiente:
interfaz pública visitable {
Public void Acept (visitante visitante);
}
Ok, con dos interfaces, necesitamos definir su implementación específica (clase concreta):
La copia del código es la siguiente:
clase pública implementos de relevo de concreta visitable
{
valor de cadena privada;
public ConcreteElement (cadena de cadena) {
valor = string;
}
// Definir el contenido específico de aceptar aquí hay una oración muy simple para llamar a public void Acept (visitante visitante) {
visitante.visittring (esto);
}
}
Echemos un vistazo a la implementación concreta del visitante:
La copia del código es la siguiente:
clase pública concretevisor implementa visitante
{
// En este método, implementamos un acceso exitoso a los elementos de la colección public void visitCollection (colección de colección) {
Iterador iterator = colección.iterator ()
while (iterator.hasnext ()) {
Objeto o = iterator.next ();
if (o instancia de visitable)
((Visitable) o) .accept (esto);
}
public void VisitString (String String) {
System.out.println ("'"+String+"'");
}
Public void visitfloat (float float) {
System.out.println (float.toString ()+"f");
}
}
En la visita anterior, implementamos acceso a cada elemento de la colección, utilizando solo una declaración de juicio, solo para determinar si es accesible.
En este punto, hemos completado la arquitectura básica del modelo de visitante.
Prerrequisitos para usar el modo de visitante
El tipo de objeto en la estructura del grupo de objetos rara vez se cambia, es decir, el tipo de identidad del visitante rara vez se cambia, como el tipo de visitante anterior rara vez cambia, si se necesitan nuevas operaciones, como en el ejemplo anterior, nosotros, nosotros, nosotros, nosotros, nosotros, nosotros Además de la implementación específica de retrete de concreta, también se necesita el nuevo contenedor2 ConcreteLement3.
Se puede ver que hay un requisito previo para usar el modo de visitante.
Si el visitante también cambia con frecuencia, es decir, los tipos de objetos en el grupo de objetos a menudo cambian, la sugerencia general es que es mejor definir las operaciones una por una en estas clases de objetos, pero Java refleja la tecnología resuelve este problema.