Java行为型设计模式之模板方法详解

 更新时间:2022年09月21日 15:05:50   作者:丨Jack_Chen丨  
模板方法的概念:定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

模板方法模式

模板方法模式属于行为型设计模式。它是指定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

模板方法模式实际上是封装了一个固定流程,该流程由几个步骤组成,具体步骤可以由子类进行不同实现,从而让固定的流程产生不同的结果。

模板方法模式的本质是抽象封装流程,具体进行实现。

应用场景

当完成一个操作具有固定的流程时,由抽象固定流程步骤,具体步骤交给子类进行具体实现(固定的流程,不同的实现)。

1.实现一个算法的不变的部分(子类共有方法),将可变的行为留给子类来实现。

2.各子类中公共的行为被提取出来并集中到一个公共的父类中,以而避免代码重复。

比如:入职资料的填写,通常会有一系列的流程,只需要按照流程规则一步一步做即可。是目标方法模式的体现。

主要角色

1.抽象模板(AbstractClass)

抽象模板类,定义了一套算法框架/流程。

2.具体实现(ConcreteClass)

具体实现类,对算法框架/流程的某些步进行了实现。

优缺点

1.将相同处理逻辑代码放到抽象父类中,提高代码的复用性。

2.将不同代码放到不同子类中,通过对子类的扩展增加新的行为,提高代码的扩展性。

3.把不变的行为写在父类上,去除子类的重复代码,提供了一个很好的代码复用平台,符合开闭原则

缺点

1.类数目的增加,每个抽象类都需要一个子类来实现,这样导致类的个数增加。

2.类数量的增加,间接地增加了系统实现的复杂度。

3.继承关系自身缺点,如果父类添加新的抽象方法,所有子类都要改一遍。

模板方法模式的基本使用

创建抽象模板角色

public abstract class AbstractClass {
    protected void step1() {
        System.out.println("AbstractClass:step1--->准备入职材料");
    }
    protected void step2() {
        System.out.println("AbstractClass:step2--->填写入职登记信息");
    }
    protected void step3() {
        System.out.println("AbstractClass:step3--->签订劳动合同");
    }
    protected void step4() {
        System.out.println("AbstractClass:step4--->办理工牌,安排工位");
    }
    public final void templateMehthod() {
        this.step1();
        this.step2();
        this.step3();
        this.step4();
    }
}

创建具体实现

public class ConcreteClassA extends AbstractClass {
    @Override
    protected void step1() {
        System.out.println("ConcreateClassA:step1--->普通员工 准备入职材料");
    }
}
public class ConcreteClassB extends AbstractClass {
    @Override
    protected void step1() {
        System.out.println("ConcreateClassA:step1--->关系户 准备入职材料");
    }
}

客户端调用

    public static void main(String[] args) {
        System.out.println("--------------普通人入职------------");
        AbstractClass abcA = new ConcreteClassA();
        abcA.templateMehthod();
        System.out.println("--------------关系户入职------------");
        AbstractClass  abcB = new ConcreteClassB();
        abcB.step3();
        abcB.step4();
    }

--------------普通人入职------------
ConcreateClassA:step1--->普通员工 准备入职材料
AbstractClass:step2--->填写入职登记信息
AbstractClass:step3--->签订劳动合同
AbstractClass:step4--->办理工牌,安排工位
--------------关系户入职------------
ConcreateClassA:step1--->关系户 准备入职材料
AbstractClass:step2--->填写入职登记信息
AbstractClass:step3--->签订劳动合同
AbstractClass:step4--->办理工牌,安排工位

到此这篇关于Java行为型设计模式之模板方法详解的文章就介绍到这了,更多相关Java模板方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java使用split分割无效获取不到预期效果的解决办法

    Java使用split分割无效获取不到预期效果的解决办法

    这篇文章主要给大家介绍了关于Java使用split分割无效获取不到预期效果的解决办法,java的String类中有个split方法,这个是我们经常使用到的,需要的朋友可以参考下
    2023-08-08
  • SpringBoot环境搭建及第一个程序运行(小白教程)

    SpringBoot环境搭建及第一个程序运行(小白教程)

    这篇文章主要介绍了SpringBoot环境搭建及第一个程序运行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 微信APP支付Java代码

    微信APP支付Java代码

    这篇文章主要为大家详细介绍了微信APP支付Java代码,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Idea Project文件目录不见了,只剩External Libraries和imi文件的解决

    Idea Project文件目录不见了,只剩External Libraries和imi文件的解决

    这篇文章主要介绍了Idea Project文件目录不见了,只剩External Libraries和imi文件的解决方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 详解Java中Dijkstra(迪杰斯特拉)算法的图解与实现

    详解Java中Dijkstra(迪杰斯特拉)算法的图解与实现

    Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。本文将详解该算法的图解与实现,需要的可以参考一下
    2022-05-05
  • Spring Boot拓展XML格式的请求和响应操作过程

    Spring Boot拓展XML格式的请求和响应操作过程

    在我们开发过程中,我们经常使用的参数绝大多少事HTML和JSON格式的请求和响应处理,但是我们在实际开发过程中,我们可能经历一些,比如对于XML格式的请求,本文给大家介绍Spring Boot拓展XML格式的请求和响应,感兴趣的朋友一起看看吧
    2023-10-10
  • Spring boot+mybatis+thymeleaf 实现登录注册增删改查功能的示例代码

    Spring boot+mybatis+thymeleaf 实现登录注册增删改查功能的示例代码

    这篇文章主要介绍了Spring boot+mybatis+thymeleaf 实现登录注册增删改查功能的示例代码,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Springboot居然可以设置动态的Banner(推荐)

    Springboot居然可以设置动态的Banner(推荐)

    这篇文章主要介绍了Springboot居然可以设置动态的Banner,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 使用log4j2关闭debug日志

    使用log4j2关闭debug日志

    这篇文章主要介绍了使用log4j2关闭debug日志方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 浅谈如何优雅地停止Spring Boot应用

    浅谈如何优雅地停止Spring Boot应用

    这篇文章主要介绍了浅谈如何优雅地停止Spring Boot应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05

最新评论