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

【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种设计模式持续更新汇总中。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值