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

简介: 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类图

image.png

实现代码

我们举这样一个栗子:模拟所有学生开学报到的流程: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("------------------");
    }
}

运行结果展示:

image.png

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

相关文章
|
26天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
27天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
51 4
|
2月前
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
36 6
|
2月前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
48 0
[Java]23种设计模式
|
24天前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
2月前
|
算法 Java Linux
java制作海报四:java BufferedImage 转 InputStream 上传至OSS。png 图片合成到模板(另一个图片)上时,透明部分变成了黑色
这篇文章主要介绍了如何将Java中的BufferedImage对象转换为InputStream以上传至OSS,并解决了png图片合成时透明部分变黑的问题。
83 1
|
2月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
2月前
|
设计模式 Java
Java设计模式
Java设计模式
30 0
|
SQL 缓存 安全
Java高频面试题目
面试时面试官最常问的问题总结归纳!
147 0
JAVA高频面试题目集锦(6)
JAVA高频面试题目集锦(6)
142 0
JAVA高频面试题目集锦(6)