开发者社区> 游客a74jvhcp7vclg> 正文

Java模板模式(template)

简介: java23中设计模式中的模板模式是我们经常在框架源码中能看到的设计模式,所以本文就给大家来介绍下模板模式
+关注继续查看


 java23中设计模式中的模板模式是我们经常在框架源码中能看到的设计模式,所以本文就给大家来介绍下模板模式

模板模式

模板模式介绍

 模板方法模式是编程中经常用得到的模式,它定义了一个操作中的算法核心,然后将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定的步骤。

 换个说法就是某个流程的代码已经都具备了,但是其中某个节点的代码暂时不能确定,因此,我们采用模板方法模式,将这个节点的代码实现转移到子类中完成,即:处理步骤父类中定义好,具体的实现延迟到子类定义中。

代码实现

 我们通过银行办理业务,排队区号来操作来模拟模板模式。

/**
 * 父类
 * @author 波波烤鸭
 *
 */
public abstract class BankTemplateMethod {
    /**
     * 具体方法
     */
    public void takeNumber(){
        System.out.println("取号排队");
    }
    /**
     * 办理具体的业务  钩子方法:抽象方法,交给子类去实现
     */
    public abstract void transact(); 
    /**
     * 具体方法
     */
    public void evaluate(){
        System.out.println("反馈评分");
    }
    
    /**
     * 模板方法!!!
     */
    public final void process(){    
        this.takeNumber();

        this.transact();

        this.evaluate();
    }
}

测试类

public static void main(String[] args) {

    // 采用匿名内部类
    BankTemplateMethod btm1 = new BankTemplateMethod() {
        @Override
        public void transact() {
            System.out.println("我要存钱!");
        }
    };
    btm1.process();
    System.out.println("---------------------------");
    BankTemplateMethod btm2 = new BankTemplateMethod() {
        @Override
        public void transact() {
            System.out.println("我要理财!我这里有2000万韩币");
        }
    };
    btm2.process();
}

输出

取号排队
我要存钱!
反馈评分
---------------------------
取号排队
我要理财!我这里有2000万韩币
反馈评分

小结:银行为了方便顾客办理业务,所以制定了一套固定的业务流程。比如来了先取号排队,然后办理业务,然后评分。取号排队和评分这些功能银行可以实现,但是办理具体的业务就得具体的顾客来实现了。这就是模板模式。

开发中常见的场景

1 数据库访问的封装

2 Junit单元测试

 3  servlet中的doGet和doPost方法

4 Hibernate中的模板程序

5  Spring中的JdbcTemplate,HibernateTemplate等

6   …


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
iOS逆向-day9:签名机制(上)
iOS逆向-day9:签名机制(上)
7 0
DevOps运维开发一体化
DevOps运维开发一体化
5 0
Java项目:UMS 用户管理系统(三)
Java项目:UMS 用户管理系统(三)
4 0
使用 Haproxy + Nginx 实现高可用
Haproxy 是目前比较流行的一种集群调度工具,同类集群调度器工具有很多,如 LVS 和 Nginx。相比较而言,LVS 性能最好,但是搭建相对复杂;Nginx 的 upstream 模块虽然支持集群功能,但是对集群节点健康检查功能不强,性能没有 Haproxy 好。
6 0
〖Docker指南⑨〗本地一键部署微服务项目到阿里云服务器
想必大家都经历过手动上传文件到服务器上,然后手动解压等等一系列累人又无脑的操作,所以本次将在IDEA上整合docker,实现一键部署微服务项目,让你远离烦恼。 如果大家看了我前面的〖Docker指南〗系列,服务器里一定安装了docker,并且对docker的相关知识以及操作都了如指掌了。 那么接下来,所需要的就是一个微服务项目,小伙伴们可以自己搭建,也可以用我的,我已经把这个微服务demo上传到 Gitee【https://gitee.com/issavior/ossa】,大家可以自取。
4 0
Java 8 新特性:扩展注解(类型注解和重复注解)
Java 8 新特性:扩展注解(类型注解和重复注解)
4 0
2021Vue.js面试题汇总及答案【全网最全 建议收藏】(一)
2021Vue.js面试题汇总及答案【全网最全 建议收藏】
4 0
iOS逆向-day10:LLVM 编译器(上)
iOS逆向-day10:LLVM 编译器
3 0
Java项目:UMS 用户管理系统(四)
Java项目:UMS 用户管理系统(四)
4 0
+关注
游客a74jvhcp7vclg
10余年开发架构经验,同时乐于技术分享!
332
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载