definición:
Un marco para definir un algoritmo en una operación, retrasando algunos pasos a una subclase. Esto permite que una subclase redefine ciertos pasos específicos de un algoritmo sin cambiar la estructura de un algoritmo.
Suena muy alto, mi entendimiento:
1. La clase principal declara varios métodos abstractos (métodos básicos) y varios métodos específicos (métodos de plantilla)
2. El método abstracto es un paso de un algoritmo (proceso) que se implementa en una subclase
3. El método de plantilla es un marco de algoritmo (proceso). Se ha acordado en la clase principal implementar llamadas a métodos básicos y completar la lógica fija.
4. La estructura de un algoritmo (proceso) se define en la clase principal, y los detalles de implementación específicos se implementan en la subclase.
Nota: Para prevenir operaciones maliciosas, el método de plantilla general se agrega con final, y se prohíbe la reescritura.
Diagrama de clase general:
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
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 clase abstracta. 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 del modo de método de plantilla:
1. Encapsular la parte sin cambios y expandir la parte variable
2. Extraer parte pública del código para un fácil mantenimiento
3. El comportamiento es controlado por la clase principal e implementado por la clase infantil
Escenarios aplicables para el modo de método de plantilla:
1. múltiples subclases tienen métodos públicos y la lógica es básicamente la misma
2. Para los algoritmos complejos, el algoritmo central está diseñado como un método de plantilla, y cada subclase implementa las funciones detalladas.
3. Refactorizar el código
Extensión del patrón de método de plantilla
Resumir:
La clase principal establece un marco. Después de que la clase infantil reescribe algunos métodos de la clase principal, llama al método heredado de la clase principal para producir resultados diferentes.