Java8函数式编程入门 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

模板方法模式

定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。

query

例子:一个工作流程管理类,不同的任务有不同的完成方式由具体子类实现(完整代码见右边代码区)。

public class Test {

    public static void main(String[] args) {
        initiateWorkFlow(new WorkflowManagerImpl1());
    }

    private static void initiateWorkFlow(WorkflowManager workflowMgr){
        workflowMgr.doTask1();
        workflowMgr.doTask2();
        workflowMgr.doTask3();
    }
}

利用Java 8的Lambda表达式和默认方法实现模板方法模式。之前已经说过,接口只有在只声明了一个抽象方法的前提下,才可以使用Lambda表达式。

interface WorkflowManager{

    default void doTask1(){
        System.out.println("Doing Task1...");
    }

    void doTask2();

    default void doTask3(){
        System.out.println("Doing Task3...");
    }
}

public class Test {

    public static void main(String[] args) {
        initiateWorkFlow(()->System.out.println("Doing Task2.1..."));
        //initiateWorkFlow(()->System.out.println("Doing Task2.2..."));
        //initiateWorkFlow(()->System.out.println("Doing Task2.3..."));

    }

    private static void initiateWorkFlow(WorkflowManager workflowMgr){
        workflowMgr.doTask1();
        workflowMgr.doTask2();
        workflowMgr.doTask3();
    }
}

输出结果:

query