二十二、模板方法模式

  • 目的 : 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
  • 核心 : 抽象类定义模板方法(包含算法骨架,由基本方法组成),基本方法可以是抽象方法(由子类实现)或具体方法/钩子方法(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第三部分实现
相关推荐
panxianren2 小时前
Bun 1.4 的 bun test --parallel 将 4 秒的测试套件缩短到约 1 秒
java·javascript
sunshine22 girl3 小时前
Java学习七 Java 项目实战2-注册业务
java·学习
省钱兄--zs4 小时前
北京24小时自助健身房系统软件开发实战:从架构设计到部署指南
java·数据仓库·spring boot·小程序·需求分析
youdexiang4 小时前
Android录音软件时间关键词检索功能分析
java·人工智能
sunshine22 girl5 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
code2cat5 小时前
Java进阶篇之AtomicStampedReference:引用回到原值,版本戳仍能记住变化
java·cas·并发编程·aba
泡茶喝茶写代码6 小时前
A股量化数据工程:从 REST 接口到策略信号(第 8 篇):成长能力因子:营收与利润增速
java·python·股票数据api·股票数据api接口·股票量化数据api·股票量化数据接口·股票数据api数据
\光辉岁月/7 小时前
7.javase-面向对象
java·开发语言
weixin_531094697 小时前
heap_4内存管理
java·开发语言·算法
程序员南飞8 小时前
win系统安装minio
java·数据结构·算法