¿Conoce el patrón de método de plantilla del método predeterminado de expresión Lambda en Java 8?

Para describir el método de plantilla en términos más simples, considere este escenario: Suponga que en un sistema de flujo de trabajo, para completar tareas, hay 4 tareas que deben ejecutarse en un orden de ejecución dado. En estas cuatro tareas, la implementación de diferentes sistemas de flujo de trabajo puede personalizar el contenido de ejecución de la tarea de acuerdo a su propia situación.

El método de plantilla se puede aplicar a los escenarios anteriores: encapsular las cuatro tareas principales del sistema de flujo de trabajo en clases abstractas y, si las tareas se pueden personalizar, posponer las tareas personalizables a subclases.

Código:

/** 
 * Abstract Workflow system 
 */
abstract class WorkflowManager2{

    public void doTask1(){

        System.out.println("Doing Task1...");

    }

    public abstract void doTask2();

    public abstract void doTask3();

    public void doTask4(){

        System.out.println("Doing Task4...");

    }

}

/** 
 * One of the extensions of the abstract workflow system 
 */
class WorkflowManager2Impl1 extends WorkflowManager2{

    @Override
    public void doTask2(){

        System.out.println("Doing Task2.1...");

    }

    @Override
    public void doTask3(){

        System.out.println("Doing Task3.1...");

    }

}

/** 
 * Other extension of the abstract workflow system 
 */
class WorkflowManager2Impl2 extends WorkflowManager2{

    @Override
    public void doTask2(){

        System.out.println("Doing Task2.2...");

    }

    @Override
    public void doTask3(){

        System.out.println("Doing Task3.2...");

    }

}

Echemos un vistazo a cómo se utiliza el sistema de flujo de trabajo:

public class TemplateMethodPattern {

    public static void main(String[] args) {

        initiateWorkFlow(new WorkflowManager2Impl1());

        initiateWorkFlow(new WorkflowManager2Impl2());

    }

    static void initiateWorkFlow(WorkflowManager2 workflowMgr){

        System.out.println("Starting the workflow ... the old way");

        workflowMgr.doTask1();

        workflowMgr.doTask2();

        workflowMgr.doTask3();

        workflowMgr.doTask4();

    }

}

La salida se ve así:

Starting the workflow ... the old way

Doing Task1...

Doing Task2.1...

Doing Task3.1...

Doing Task4...

Starting the workflow ... the old way

Doing Task1...

Doing Task2.2...

Doing Task3.2...

Doing Task4...

Hasta ahora todo va bien. Pero el enfoque principal de este blog no es el patrón de método de plantilla, sino cómo implementar el patrón de método de plantilla utilizando expresiones Java 8 Lambda y métodos predeterminados. Ya he dicho antes que las expresiones Lambda solo se pueden usar en una interfaz si solo se declara un método abstracto. Esta regla debe explicarse en el ejemplo de este artículo: WorkflowManager2 solo puede tener una tarea abstracta o personalizada.

Podemos reemplazar las clases abstractas con interfaces con métodos predeterminados, por lo que nuestro nuevo sistema de flujo de trabajo se ve así:

interface WorkflowManager{

    public default void doTask1(){

        System.out.println("Doing Task1...");

    }

    public void doTask2();

    public default void doTask3(){

        System.out.println("Doing Task3...");

    }

    public default void doTask4(){

        System.out.println("Doing Task4...");

    }

}

Ahora nuestro sistema de flujo de trabajo tiene una tarea personalizable 2. Bajemos y usemos expresiones Lambda para manejar el trabajo de inicialización:

public class TemplateMethodPatternLambda {

    public static void main(String[] args) {

       /**     
        * Using lambda expression to create different      
        * implementation of the abstract workflow 
        */
        initiateWorkFlow(()->System.out.println("Doing Task2.1..."));

        initiateWorkFlow(()->System.out.println("Doing Task2.2..."));

        initiateWorkFlow(()->System.out.println("Doing Task2.3..."));

    }

    static void initiateWorkFlow(WorkflowManager workflowMgr){

        System.out.println("Starting the workflow ...");

        workflowMgr.doTask1();

        workflowMgr.doTask2();

        workflowMgr.doTask3();

        workflowMgr.doTask4();

    }

}

Este es un ejemplo de expresiones Lambda aplicadas al patrón del método de plantilla. '

Al final

Si desea aprender Java en el West Hall, reciba el resumen de preguntas de la entrevista de Java de los fabricantes de primera línea + manual de Alibaba Taishan + guía de pensamiento de aprendizaje para cada punto de conocimiento + un resumen de los puntos de conocimiento básicos de Java en un documento pdf de 300 páginas.

El contenido de estos materiales son todos los puntos de conocimiento que el entrevistador debe preguntar durante la entrevista. El capítulo incluye muchos puntos de conocimiento, incluidos conocimientos básicos, colecciones de Java, JVM, concurrencia multiproceso, principios de primavera, microservicios, Netty y RPC, Kafka , Diario, patrón de diseño, algoritmo Java, base de datos, Zookeeper, caché distribuida, estructura de datos, etc. expediente

Supongo que te gusta

Origin blog.csdn.net/weixin_46577306/article/details/107965028
Recomendado
Clasificación