23 Patrones de diseño, Capítulo 12: Modo de método de plantilla de Java
Definición: Define el marco de un algoritmo en una operación y retrasa algunos pasos a una subclase, para que la subclase pueda redefinir ciertos pasos específicos en el algoritmo sin cambiar la estructura del algoritmo.
Tipo: Patrón de comportamiento
Diagrama de clases:
De hecho, el método de plantilla es un patrón de uso frecuente en la programación. Primero veamos un ejemplo. Un día, el programador A obtuvo una tarea: dar una variedad de enteros, ordenar los números en la matriz de pequeña a grande e imprima los resultados ordenados. Después del análisis, esta tarea se puede dividir aproximadamente en dos partes: clasificación e impresión. La función de impresión es fácil de implementar, por lo que la clasificación es un poco problemática. Pero A tiene una manera, primero complete la función de impresión y encuentre a alguien más para hacer la función de clasificación.
Abstract Class AbstractSort { / *** Matriz de clasificación de una matriz* a grande* @param* / proteged abstract void sort (int [] array); public void showsortResult (int [] array) {this.sort (array); System.out.print ("Ordena el resultado:"); for (int i = 0; i <array.length; i ++) {system.out.printf ("%3s", array [i]); }}}Después de escribir, un colega encontró un colega que acababa de graduarse y comenzó a trabajar y dijo: Hay una tarea, ya he escrito la lógica principal, por lo que puede implementar la lógica restante. Así que le di la clase de resúmenes a B y dejé que B escriba para implementarla. B lo tomó y lo vio. Era demasiado simple. Se hizo en 10 minutos. El código es el siguiente:
clase ConcreteSort extiende AbstractSort {@Override protegido void sort (int [] array) {for (int i = 0; i <array.length-1; i ++) {selectSort (array, i); }} private void selectSort (int [] array, int index) {int minvalue = 32767; // Valor mínimo variable int indexmin = 0; // Valor mínimo Variable de índice int temp; // Variable de estadificación para (int i = index; i <array.length; i ++) {if (array [i] <minvalue) {// Encuentra el valor mínimo minvalue = array [i]; // Almacenamiento El valor mínimo indexmin = i; }} Temp = array [index]; // intercambiar dos valores numéricos Array [index] = array [indexmin]; matriz [indexmin] = temp; }}Después de escribirlo, dárselo a A, y A lo llevará para ejecutarlo:
Cliente de clase pública {public static int [] a = {10, 32, 1, 9, 5, 7, 12, 0, 4, 3}; // matriz de datos preestablecida public static void main (string [] args) {resumensort s = new ConcreteSort (); S.SHOWSORTRESULT (a); }} Resultados de ejecución:
Resultados de clasificación: 0 1 3 4 5 7 9 10 12 32
Se ejecuta normalmente. Ok, la tarea se completa. Así es, este es el patrón de método de plantilla. La mayoría de los graduados que acaban de ingresar al lugar de trabajo deben tener experiencias similares a B. una tarea compleja es escrita por las grandes personas de la empresa, y luego escriben los métodos más simples en abstracción y los entregaron a otros colegas para que se desarrollen. Esta división del trabajo a menudo se usa en empresas con niveles relativamente obvios de programadores. Por ejemplo, si un equipo de proyecto tiene arquitectos, ingenieros senior e ingenieros junior, los arquitectos generalmente usan una gran cantidad de interfaces y clases abstractas para unir la lógica de todo el sistema, y la codificación de implementación se entrega a ingenieros senior e ingenieros junior de acuerdo con la dificultad. ¿Qué tal si ha utilizado el modo de método de plantilla?
Estructura del patrón de método de plantilla
El patrón de método de plantilla consiste en una clase abstracta y una (o un grupo de) clases de implementación a través de estructuras de herencia. Los métodos en clases abstractas se dividen en tres tipos:
Método abstracto: la clase principal solo declara pero no la implementa, pero define las especificaciones y luego las implementa por su subclase.
Método de plantilla: declarado e implementado por clases abstractas. En términos generales, los métodos de plantilla llaman a los métodos abstractos para completar las principales funciones lógicas, y los métodos de plantilla se definen principalmente como tipos finales, lo que indica que las principales funciones lógicas no pueden reescribirse en subclases.
Método de gancho: declarado e implementado por clases abstractas. Sin embargo, las subclases se pueden extender y las subclases pueden afectar la lógica de los métodos de plantilla extendiendo los métodos de gancho.
La tarea de las clases abstractas es construir un marco lógico, que generalmente está escrito por personal experimentado, porque la calidad de las clases abstractas determina directamente si el programa es estable.
Las clases de implementación se utilizan para implementar detalles. El método de plantilla en clases abstractas completa la lógica comercial mediante la implementación de métodos de extensión de clase. Mientras el método de extensión en la clase de implementación pasa la prueba unitaria, la función general generalmente no tendrá errores importantes bajo la premisa de que el método de plantilla es correcto.
Ventajas y escenarios aplicables del método de plantilla
Fácil de expandir. En términos generales, el método de plantilla en una clase abstracta es una parte que no es fácil de cambiar reversamente, mientras que el método abstracto es una parte que es fácil de cambiar. Por lo tanto, al agregar la clase de implementación, generalmente es fácil expandir la función, que se ajusta al principio de apertura y cierre.
Fácil de mantener. Para el modo de método de plantilla, es precisamente porque su lógica principal es la misma que se utiliza el método de plantilla. Si no se usa el método de plantilla, es muy inconveniente mantener el mismo código en un desastre.
Más flexible. Debido a que existen métodos de gancho, la implementación de subclases también puede afectar la operación de la lógica principal en la clase principal. Sin embargo, si bien es flexible, porque las subclases afectan a la clase principal, violar el principio de reemplazo de Richter también traerá riesgos al programa. Esto pone requisitos más altos en el diseño de clases abstractas.
Cuando múltiples subclases tienen el mismo método y los métodos son lógicamente iguales, puede considerar usar el patrón de método de plantilla. Este modo también es adecuado para usar el programa cuando el marco principal del programa es el mismo y los detalles son diferentes.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.