二十二、模板方法模式

  • 目的 : 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
  • 核心 : 抽象类定义模板方法(包含算法骨架,由基本方法组成),基本方法可以是抽象方法(由子类实现)或具体方法/钩子方法(Hook Method,提供默认实现或扩展点)。
  • 场景 :固定流程,可变细节(如支付、审批);多个子类共享相似流程(如数据库操作、文件导出)。

首先是抽象基类,定义模板方法的框架

java 复制代码
package templatemethod;

public abstract class BaseTemplate {
	public abstract void part1();

	public abstract void part2();

	public abstract void part3();

	// 模板方法,定义算法骨架,使用final防止子类修改算法结构
	public final void useTemplateMethod(){   
		part1();
		part2();
		part3();
	}
}

然后第一个模板方法具体实现类

java 复制代码
package templatemethod;

public class TemplateMethod1 extends BaseTemplate {

    @Override
    public void part1() {
        System.out.println("模板1第一部分实现");
    }

    @Override
    public void part2() {
        System.out.println("模板1第二部分实现");
    }

    @Override
    public void part3() {
        System.out.println("模板1第三部分实现");
    }
}

第二个模板方法具体实现类

java 复制代码
package templatemethod;

public class TemplateMethod2 extends BaseTemplate {

    @Override
    public void part1() {
        System.out.println("模板2第一部分实现");
    }

    @Override
    public void part2() {
        System.out.println("模板2第二部分实现");
    }

    @Override
    public void part3() {
        System.out.println("模板2第三部分实现");
    }
}

函数入口

java 复制代码
package templatemethod;

public class MainTest {
    public static void main(String[] args) {
        // 使用第一种模板实现
        BaseTemplate template = new TemplateMethod1();
        template.useTemplateMethod();

        System.out.println();

        // 使用第二种模板实现
        template = new TemplateMethod2();
        template.useTemplateMethod();
    }
}

终端输出

复制代码
模板1第一部分实现
模板1第二部分实现
模板1第三部分实现

模板2第一部分实现
模板2第二部分实现
模板2第三部分实现
相关推荐
朦胧之3 小时前
AI 编程-老项目改造篇
java·前端·后端
程序猿大帅8 小时前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java
程序员晓琪9 小时前
约定大于配置:基于 Java 包名自动生成 API 版本路由的最佳实践
java·spring boot·后端
Flittly9 小时前
【AgentScope Java新手村系列】(11)中断与恢复
java·spring boot·spring
众少成多积小致巨10 小时前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
东坡白菜10 小时前
破局全栈:前端开发的Java入门实战记录—JPA(2)
java·后端
SimonKing16 小时前
艹,维护AI写的代码,我心态崩了......
java·后端·程序员
用户2986985301416 小时前
Java Word 文档样式进阶:段落与文本背景色设置完全指南
java·后端
小bo波1 天前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
nanxun8862 天前
记一次诡异的 Docker 容器"串包"故障排查
java