设计模式之模板方法模式(Java实现)

简介: 设计模式之模板方法模式(Java实现)

一、认识模板方法


模板方法定义:定义一个操作中的算法骨架(执行骨架),并将算法的一些步骤延迟到子类中让开发者取实现,使得子类在可以不改变该算法结构的情况下重定义该算法的某些特定步骤。


结构:


抽象类

模板方法:定义了整个执行流程的骨架,按照顺序来调用其中的基本方法。

基本方法:已经实现了的在执行流程中的方法,基本类型如下

抽象方法:在抽象类中声明,由具体子类实现。

具体方法:在抽象类中已经实现,在具体子类中可以继承或重写它。

钩子方法:在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。

具体类(继承抽象类):实现抽象类中所定义的抽象方法和钩子方法。



优缺点:


优点:封装了不变部分,扩展可变部分;在父类中提取了公共的部分代码,便于代码复用;抽象类中定义了部分抽象方法来让子类实现,子类可通过扩展方式增加相应的功能,符合开闭原则。

缺点:对于每一个不同的实现都要定义一个子类,导致类的个数增大,间接增加了系统实现的复杂度;提升了代码阅读的难度;若是抽象父类添加了新的抽象方法,那么所有的子类都要改一遍,这就又不符合开闭原则。

应用场景:


在servlet中的HttpServlet抽象类中的service()方法相当于模板方法,其中包含了各种请求方法(doGet、doPost)的调用,并且请求方法可以通过继承的方式来去实现,让开发者进行自定义操作。

需要引入servlet-apijar包。

SpringMVC中的AbstractController抽象类中的handleRequest()方法也相当与模板方法。其中包含了对请求方法的判断,该类中提供了一个抽象方法handleRequestInternal()让用户进行自定义。

需要引入spring-webjar包


二、实现模板方法


demo见xyz.changlu.template包下代码:



抽象类:AbstractTemplate


//抽象模板类
public abstract class AbstractTemplate {
    //一整套数据库查询方法(连接数据库、执行查询操作、关闭连接操作)
    public void templateMethod(){
        System.out.println("初始化操作");
        System.out.println("连接数据库操作");
        abstractMethod1();
        abstractMethod2();
        System.out.println("关闭连接操作");
    }
    public abstract void abstractMethod1();
    public abstract void abstractMethod2();
}



其中定义了一个模板方法,对于一些非核心业务的流程直接已经帮你实现,而核心业务方法设置为指定的抽象方法,让开发者自己去实现。

具体抽象类:ConcreteTemplate


//具体模板类:实现具体的核心业务功能
public class ConcreteTemplate extends AbstractTemplate {
    @Override
    public void abstractMethod1() {
        System.out.println("执行query()查询操作");
    }
    @Override
    public void abstractMethod2() {
        System.out.println("执行update()更新操作");
    }
}


实现了模板方法的两个抽象方法(即核心方法)。

测试程序:测试类Customer


//测试类
public class Customer {
    public static void main(String[] args) {
        AbstractTemplate template = new ConcreteTemplate();
        template.templateMethod();//执行模板方法
    }
}




总结


模板方法模式常常用于定义一个执行过程骨架(使用一个抽象类包含一个具体方法,该方法中是相应的执行流程,并且还有个抽象方法让开发者自定义),对于一些核心方法可以让开发者去继承该抽象类并实现方法。在框架的很多地方都使用到了该模式!!!简化了开发者许多不必要的操作,让开发者只需要专注于主要的业务开发即可!不过这样的话对于小白就不太友好了。

相关文章
|
28天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
44 0
[Java]23种设计模式
|
11天前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
1月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
1月前
|
设计模式 Java
Java设计模式
Java设计模式
29 0
|
1月前
|
设计模式 Java
Java设计模式之外观模式
这篇文章详细解释了Java设计模式之外观模式的原理及其应用场景,并通过具体代码示例展示了如何通过外观模式简化子系统的使用。
29 0
|
7天前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
19 4
|
5月前
|
设计模式 缓存 安全
Java设计模式的单例模式应用场景
Java设计模式的单例模式应用场景
61 4
|
2月前
|
设计模式 安全 Java
Java 编程中的设计模式:单例模式的深度解析
【9月更文挑战第22天】在Java的世界里,单例模式就像是一位老练的舞者,轻盈地穿梭在对象创建的舞台上。它确保了一个类仅有一个实例,并提供全局访问点。这不仅仅是代码优雅的体现,更是资源管理的高手。我们将一起探索单例模式的奥秘,从基础实现到高级应用,再到它与现代Java版本的舞蹈,让我们揭开单例模式的面纱,一探究竟。
42 11
|
3月前
|
设计模式 存储 负载均衡
【五】设计模式~~~创建型模式~~~单例模式(Java)
文章详细介绍了单例模式(Singleton Pattern),这是一种确保一个类只有一个实例,并提供全局访问点的设计模式。文中通过Windows任务管理器的例子阐述了单例模式的动机,解释了如何通过私有构造函数、静态私有成员变量和公有静态方法实现单例模式。接着,通过负载均衡器的案例展示了单例模式的应用,并讨论了单例模式的优点、缺点以及适用场景。最后,文章还探讨了饿汉式和懒汉式单例的实现方式及其比较。
【五】设计模式~~~创建型模式~~~单例模式(Java)
|
2月前
|
设计模式 Java 安全
Java设计模式-单例模式(2)
Java设计模式-单例模式(2)

热门文章

最新文章

  • 1
    C++一分钟之-设计模式:工厂模式与抽象工厂
    43
  • 2
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    50
  • 3
    C++一分钟之-C++中的设计模式:单例模式
    58
  • 4
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    38
  • 5
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    64
  • 6
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    59
  • 7
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    42
  • 8
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    50
  • 9
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    112
  • 10
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    78