二十二、模板方法模式

  • 目的 : 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
  • 核心 : 抽象类定义模板方法(包含算法骨架,由基本方法组成),基本方法可以是抽象方法(由子类实现)或具体方法/钩子方法(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第三部分实现
相关推荐
古法老登瞎折腾6 小时前
大数据智能运维实战(十一):运维 MCP 的工程化——权限、限流、审计与错误处理
java·大数据·运维·spring ai·mcp
智能运维指南7 小时前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
yz_aiks8 小时前
Spring AI 2.1 ChatMemory 已过时用什么替代:迁移到 Session Memory 实战(JDBC 存储与会话压缩)
java·spring boot·大模型·ai agent·spring ai
金銀銅鐵8 小时前
[Java] 用 GUI 展示 EnumMap 增删键值对时的内部变化
java·后端·ai编程
学长毕设8 小时前
基于SpringBoot的上门洗车服务系统设计与实现
java·spring boot·后端
jason成都8 小时前
RTKLIB-Java 多基线联合RTK:FIX率从0%到91.5%的三层根因修复
java·gnss·rtklib·rtklib_java
鱼宵9 小时前
Stream 终端操作一次讲透:collect、count、reduce 怎么选
java·stream·终端操作
白山编程大哥9 小时前
Java 后端如何优雅地把 List 集合返回给前端
java·前端·list
Linux运维技术栈9 小时前
CVE-2026-91403 高危漏洞修复:Rocky Linux 9 多版本 JDK 环境清理实操
java·linux·运维
On The Road :9 小时前
Java 多线程详解:从入门到线程安全
java·python·安全