Patrón de diseño Notas 16 - Patrón de visitante (visitante)

Completar los requisitos del sistema de evaluación

1) Divida a la audiencia en hombres y mujeres, evalúe a los cantantes y obtenga sus diferentes evaluaciones del cantante después de ver la actuación de un cantante (hay diferentes tipos de evaluaciones, como éxito, fracaso, etc.)

 

 

Método tradicional de análisis de problemas.

1) Si el sistema es relativamente pequeño, todavía está bien, pero al considerar agregar más y más funciones nuevas al sistema, los cambios en el código son relativamente grandes, lo que viola el principio ocp y no es propicio para el mantenimiento.

2) La escalabilidad no es buena, como agregar nuevos tipos de personal o métodos de gestión, no es fácil de hacer

3) Llévanos a usar un nuevo patrón de diseño: el patrón de visitante

 

Introducción básica al patrón de visitantes

1) Patrón de visitante (Visitor Pattern), que encapsula algunas operaciones sobre los elementos de una determinada estructura de datos, puede definir nuevas operaciones sobre estos elementos sin cambiar la estructura de datos.

2) Separar principalmente la estructura de datos y la operación de datos para resolver el problema de acoplamiento de la estructura de datos y la operación

3) El principio de funcionamiento básico del modo visitante es: agregar una interfaz para recibir visitantes en la clase visitada

4) El principal escenario de aplicación del modo visitante es: es necesario realizar muchas operaciones diferentes en objetos en una estructura de objeto (estas operaciones no están relacionadas entre sí) y, al mismo tiempo, es necesario evitar estas operaciones de "contaminar" las clases de estos objetos, lo que se puede solucionar utilizando el modo visitante

 

Diagrama de clase principal del patrón de visitante

Explicación del diagrama de clase principal, es decir (roles y responsabilidades del modo visitante)

1) Visitor es un visitante abstracto, que declara una operación de visita para cada clase de ConcreteElement en la estructura del objeto.

2) ConcreteVisitor: Es un valor de visita específico para implementar cada operación declarada por Visitor, y es parte de la implementación de cada operación.

3) ObjectStructure puede enumerar sus elementos y proporcionar una interfaz de alto nivel para permitir que los visitantes accedan a los elementos

4) El elemento define un método de aceptación para recibir un objeto visitante

5) ConcreteElement es un elemento concreto e implementa el método accept

 

Código central:

    public static void main(String[] args) {         // TODO Método generado automáticamente stub         //创建ObjectStructure         ObjectStructure objectStructure = new ObjectStructure();         objectStructure.attach(nuevo Hombre());         objectStructure.attach(nueva Mujer());         //成功         Éxito éxito = nuevo Éxito();         objectStructure.display(éxito);



        


        
        



Se mantiene una lista de personas almacenadas en ObjectStructure, adjuntar:
    public void adjuntar(Persona p) {         personas.agregar(p);     }

objectStructure.display(success); Esta oración:
    public void display(Acción acción) {         for(Persona p: personas) {             p.accept(acción);         }     } es recorrer todas las colas en la estructura de datos y establecer la operación, la operación de aceptar es la siguiente:




    @Override
    public void accept(Acción acción) {         // TODO Método generado automáticamente stub         action.getManResult(this);     }


 

Luego opere a través de la acción, se puede ver que, como la clase Success, se puede agregar sin afectar el Objeto original.

 

Resumen de casos de aplicación

-El envío doble se mencionó anteriormente. El llamado envío doble significa que no importa cómo cambie la clase, podemos encontrar el método deseado para ejecutar. El envío doble significa que la acción a realizar depende del tipo de solicitud y de los tipos de ambos receptores.

- Tomando el ejemplo anterior como ejemplo, supongamos que queremos agregar una clase de estado de espera para examinar las reacciones de la clase Hombre y la clase Mujer. Debido al uso del envío doble, solo necesitamos agregar una subclase Acción para llamarlo en el cliente Cambiar el código de cualquier otra clase.

 

Notas y detalles del patrón de visitante

ventaja

1) El modo visitante se ajusta al principio de responsabilidad única, lo que hace que el programa tenga una excelente escalabilidad y alta flexibilidad.

2) El modo de visitante puede unificar las funciones y puede hacer informes, interfaz de usuario, interceptores y filtros, y es adecuado para sistemas con estructuras de datos relativamente estables.

defecto

1) Los elementos específicos publican detalles a los visitantes, es decir, los visitantes prestan atención a los detalles internos de otras clases, lo que no recomienda la ley de Dimiter, lo que dificulta el cambio de elementos específicos.

2) Viola el principio de inversión de la dependencia. Los visitantes dependen de elementos concretos, no de elementos abstractos

3) Por lo tanto, si un sistema tiene una estructura de datos relativamente estable y requisitos funcionales que cambian con frecuencia, entonces el modo de visitante es más apropiado.

 

 

 

 

 

Supongo que te gusta

Origin blog.csdn.net/qq_22059611/article/details/103251450
Recomendado
Clasificación