Patrón de método de plantilla del patrón de diseño 4

antecedentes

En el desarrollo, debe haberse encontrado con tal escenario: conoce los pasos clave y el orden de ejecución de un método, pero los pasos específicos no están claros. ¿Qué harías?

Por ejemplo, si te levantas por la mañana y vas a la empresa, te desglosamos los pasos:

"
  1. Levántate y lava

  2. Desayunar

  3. Tomando transporte publico

  4. A la compañia

"

Hemos determinado este paso, pero los detalles en diferentes personas pueden ser diferentes. Por ejemplo, Xiao Ming desayuna pan y Xiao Zhang come fideos. Xiaomei toma el metro y Xiaohua toma el autobús.

Otro ejemplo, usualmente usamos plantillas de currículum para escribir currículums. Diferentes personas escriben contenido diferente y tienen las mismas plantillas.

El patrón del método de plantilla se define de la siguiente manera:

"

Defina un esqueleto de algoritmo en funcionamiento y retrase algunos pasos del algoritmo a la subclase, de modo que la subclase pueda redefinir algunos pasos específicos del algoritmo sin cambiar la estructura del algoritmo. Es una especie de patrón de comportamiento.

"

Esta definición se puede ver en la nube, codifiquemos directamente para demostrar.

Antes de escribir código, debemos entender que hay varios elementos necesarios para implementar el patrón del método de plantilla:

"
  • Clase abstracta: para definir el esqueleto básico de un algoritmo, se requieren un método de plantilla y varios métodos básicos

  • Clase concreta: implementa el método abstracto definido en la clase abstracta

"

Entonces, ¿qué es un método de plantilla? El método de plantilla define el esqueleto del algoritmo y contiene el orden de ejecución del algoritmo.

El método básico es un paso en el algoritmo que debe implementarse o reescribirse. Utilizado para expansión. La estructura es la siguiente:

Implementación de código del método de plantilla

Primero crea una clase abstracta:

public abstract class AbstractClass {
    //模板方法
    public void templateMethod() {
        specificMethod();
        abstractMethod1();
        abstractMethod2();
    }
    //具体方法
    public void specificMethod() {
        System.out.println("抽象类中的具体方法被调用...");
    }
    public abstract void abstractMethod1(); //抽象方法1
    public abstract void abstractMethod2(); //抽象方法2
}

Esto define métodos de plantilla, métodos concretos y métodos abstractos. El método de plantilla contiene métodos concretos y métodos abstractos.

Subcategorías específicas:

public class ConcreteClass extends AbstractClass {
    @Override
    public void abstractMethod1() {
        System.out.println("抽象方法1的实现被调用...");
    }

    @Override
    public void abstractMethod2() {
        System.out.println("抽象方法2的实现被调用...");
    }
}

Esta subclase hereda la clase abstracta, que implementa métodos abstractos.

El código de prueba es el siguiente:

public class TemplateMethodPattern {
    @Test
    public void test() {
        AbstractClass tm = new ConcreteClass();
        tm.templateMethod();
    }
}

Llamamos al método de plantilla y obtenemos la siguiente información:

抽象类中的具体方法被调用...
抽象方法1的实现被调用...
抽象方法2的实现被调用...

Pensando en el modo de método de plantilla

A partir del código anterior, encontramos que templateMethod()los pasos generales del método de la plantilla son fijos y el contenido del método concreto y el método abstracto se cambia. Pasamos el método abstracto y el método concreto, podemos modificar el contenido mediante herencia.

Cuando varias subclases tienen comportamientos comunes, se pueden extraer y concentrar en una clase principal común para evitar la duplicación de código. Primero, identifique las diferencias en el código existente y separe las diferencias en nuevas operaciones. Finalmente, reemplace estos códigos diferentes con un método de plantilla que llame a estas nuevas operaciones.

Creo que el método de la plantilla tiene las siguientes ventajas:

  • La parte invariable del algoritmo se encapsula en la clase principal para lograr, y la parte variable se extiende a través de la herencia.

  • La extracción de métodos similares como públicos también es fácil de mantener.

  • La clase principal controla el comportamiento y la clase secundaria implementa la extensión.

Por lo tanto, cuando diseñe algoritmos importantes y complejos, puede diseñar el algoritmo central como un método de plantilla, y cada subclase implementa las funciones detalladas circundantes.

Recomendado en el pasado

Escanee el código QR para ser más emocionante. O busque Lvshen_9 en WeChat , puede responder para obtener información en segundo plano

1.回复"java" 获取java电子书;

2.回复"python"获取python电子书;

3.回复"算法"获取算法电子书;

4.回复"大数据"获取大数据电子书;

5.回复"spring"获取SpringBoot的学习视频。

6.回复"面试"获取一线大厂面试资料

7.回复"进阶之路"获取Java进阶之路的思维导图

8.回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)

9.回复"总结"获取Java后端面试经验总结PDF版

10.回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)

11.回复"并发导图"获取Java并发编程思维导图(xmind终极版)

Otro: haga clic en [ Mis beneficios ] para tener más sorpresas.

Supongo que te gusta

Origin blog.csdn.net/wujialv/article/details/108989994
Recomendado
Clasificación