二十二、模板方法模式

  • 目的 : 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
  • 核心 : 抽象类定义模板方法(包含算法骨架,由基本方法组成),基本方法可以是抽象方法(由子类实现)或具体方法/钩子方法(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第三部分实现
相关推荐
weixin_4407841110 小时前
【HandlerThread实现原理】
android·java·开发语言
leoZ23110 小时前
本地跑大模型实战(七):llama.cpp 性能调优,让推理更快更省
java·人工智能·spring·生成对抗网络·语言模型·自然语言处理·llama
mubei-12311 小时前
SpringDAO的用法
java·开发语言·数据库
happymagic11 小时前
java spring boot做的jar包程序,如何实现自动运行启动
java·运维·服务器·spring boot·jar
都叫我大帅哥14 小时前
给 Java 程序员的 CSRF 攻击详解:从原理到防御实战
java
江南十四行14 小时前
Spring框架核心(上)——IoC控制反转与DI依赖注入详解
java·后端·spring
fb_1234515 小时前
Linux磁盘分区从入门到实操:MBR_GPT全解析+分区工具实战指南
java·linux·gpt
码智社16 小时前
JSON 零基础到资深全体系教程
java·json
wgego17 小时前
基础的反序列化一些总结(php和java)
java·开发语言·笔记
IKUN家族17 小时前
Spring MVC(四)
java·spring·mvc