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

相关文章
|
2月前
|
设计模式 前端开发 搜索推荐
前端必须掌握的设计模式——模板模式
模板模式(Template Pattern)是一种行为型设计模式,父类定义固定流程和步骤顺序,子类通过继承并重写特定方法实现具体步骤。适用于具有固定结构或流程的场景,如组装汽车、包装礼物等。举例来说,公司年会节目征集时,蜘蛛侠定义了歌曲的四个步骤:前奏、主歌、副歌、结尾。金刚狼和绿巨人根据此模板设计各自的表演内容。通过抽象类定义通用逻辑,子类实现个性化行为,从而减少重复代码。模板模式还支持钩子方法,允许跳过某些步骤,增加灵活性。
142 11
|
3月前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
2月前
|
缓存 安全 Java
【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)
单例模式下,“饿汉模式”,“懒汉模式”,单例模式下引起的线程安全问题,解锁思路和解决方法
|
3月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
56 4
|
4月前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
92 0
[Java]23种设计模式
|
3月前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
114 0
|
4月前
|
设计模式 Java
Java设计模式
Java设计模式
58 0
|
3天前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
38 14
|
6天前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
35 13

热门文章

最新文章