【Java中23种面试常考的设计模式之模板模式(Template)---行为型模式】

news/2024/7/5 3:22:22

【Java中23种面试常考的设计模式之模板模式(Template)—行为型模式】

知识回顾:

之前我们讲过的设计模式在这里呦:
【面试最常见的设计模式之单例模式】
【面试最常见的设计模式之工厂模式】
【Java中23种面试常考的设计模式之备忘录模式(Memento)—行为型模式】
【Java中23种面试常考的设计模式之观察者模式(Observer)—行为型模式】
接下来我们要进行学习的是:【Java中23种面试常考的设计模式之模板模式(Template)—行为型模式】。

模板模式

模板模式核心思想是:一个抽象类公开定义了执行它的方法的方式/模板,它的子类可以按需要重写方法实现。通俗来说就是处理步骤父类中定义好,具体的实现延迟到子类定义中。

生产开发中常用的使用场景

  1. ORM框架之Hibernate中的模板程序
  2. ORM框架之Mybatis中连接数据库的封装
  3. Spring中的JdbcTemplate,HibernateTemplate等
  4. 数据库JDBC连接访问的封装
  5. Servlet中的doGet和doPost方法
  6. 各大API接口中定义的模板方法
  7. 等等。。。。。等等。。。。

观察者模式优点与缺点

优点

  1. 封装不可变的部分,对可以改变的部分进行拓展
  2. 封装的代码就是公共的代码,需要将其抽离出来,便于管理与维护
  3. 父类与定义规则,子类具体实现

缺点

  1. 每一个不同的实现都需要一个子类来实现,子类的个数会变得越来越多,最终不便于我们对于程序的管理以及维护

核心角色

定义规则的抽象、不可变的模板类,以及实现规则,进行具体业务逻辑的具体子类。
为防止恶意操作,一般模板方法都加上 final 关键词。

UML类图

在这里插入图片描述

实现代码

我们举这样一个栗子:模拟所有学生开学报到的流程:1.到校 2.提交材料 3.审核通过

模板类

package com.template;

public abstract class Register{
   abstract void come();
   abstract void submit();
   abstract void pass();
 
   //模板
   public final void reportTemplate(){
 
      //到校
      come();
 
      //提交材料
      submit();
 
      //审核通过
      pass();
   }
}


具体实现类1

package com.template;

public class StudentA extends Register{

    

	@Override
	void come() {
		// TODO Auto-generated method stub
		System.out.println("StudentA come");
	}

	@Override
	void submit() {
		// TODO Auto-generated method stub
		System.out.println("StudentA submit");
	}

	@Override
	void pass() {
		// TODO Auto-generated method stub
        System.out.println("StudentA pass");
		
	}
    
}

具体实现类2

package com.template;


public class StudentB extends Register{

    

	@Override
	void come() {
		// TODO Auto-generated method stub
		System.out.println("StudentB come");
	}

	@Override
	void submit() {
		// TODO Auto-generated method stub
		System.out.println("StudentB submit");
	}

	@Override
	void pass() {
		// TODO Auto-generated method stub
        System.out.println("StudentB pass");
		
	}
    
}

测试代码

package com.template;

public class Main {
    public static void main(String[] args){
        Register register1=new StudentA();
        register1.reportTemplate();
        System.out.println("------------------");
        Register register2=new StudentB();
        register2.reportTemplate();
        System.out.println("------------------");
    }
}



运行结果展示:

在这里插入图片描述

好了,到这里【Java中23种面试常考的设计模式之模板模式(Template)—行为型模式】就结束了,23种设计模式持续更新汇总中。


http://lihuaxi.xjx100.cn/news/98253.html

相关文章

【day11】最近公共祖先最大连续bit数

最近公共祖先__牛客网 求父节点:父节点 孩子节点/2 (1)输入a ,b 如果ab,表示ab的公共祖先就是ab本身 (2)如果ab不相同,循环while哪个大,哪个除以2,直到相…

关于Linux系统之VM安装配置(每一个步骤都超级详细的哦!)

目录 Linux简介 VM虚拟机的介绍及安装 VM简介 VM安装(详细步骤,根据图片一步一步进行安装) 查看IP配置IP 换源 1)备份Linux自带的EPEL源 2)生成阿里源 3) 清空缓存 4) 重新生成缓存 Linux…

职业转型|经济低迷期转型产品管理职业的五大建议

当前的经济低迷使许多人开始重新评估当前的工作并重新考虑新的职业道路。产品管理是一个非常热门的职业发展方向,受到了求职者们广泛的关注,但于此同时,这也加剧了这个领域的竞争。产品管理的进入门槛本就并不低,在经济衰退期间&a…

[爬虫]4.数据解析及应用 之 bs4【爬取一部小说的文本】

回顾,上节课我们学了什么? 聚焦爬虫 数据解析方式分类:正则表达式;bs4模块;xpath模块 F12查看网页标签的html格式 正则表达式详细表示方法 正则匹配 import re listre.findall(pattern,string,flags) 创建文件夹 爬取和…

python 线程安全和锁

python 线程安全和锁 进程是计算机中最小的资源分配单位。 线程是计算机中能被cpu调度的最小单位。 一、什么是线程? 线程也叫轻量级进程,是操作系统能够进行调度的最小单位,它被包含在进程之中,是进程的实际运作单位。线程自…

简单的介绍一下:柔性数组

对于柔性数组,其实这个是在如今的大学生书本上是很难能找到的!!原因在于:笔者现在就是大学生一枚!!但是在C语言的书本上没有涉及到柔性数组的部分!!经查略资料,我们可以找…

Codeforces Round #827 (Div. 4)

A:给定三个数字,问是否存在1个数字是另外两个的和 void solve(){int a, b, c;cin >> a >> b >> c;if(a b c || a c b || b c a) puts("YES");else puts("NO"); } B:给定一个数组&#xff0…

centos8 安装nginx

安装个 Nginx 配置 vue 还是折腾了会。 下载源码地址: Index of /download/ http://nginx.org/download/nginx-1.20.2.tar.gz 解压 ./configure make make install echo export PATH$PATH:/usr/local/nginx/sbin >> ~/.bashrc source ~/.bashrc 默认配…