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模板方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringSecurity详解整合JWT实现全过程

    SpringSecurity详解整合JWT实现全过程

    JWT作为一个开放的标准( RFC 7519 ),定义了一种简洁的,自包含的方法用于通信双方之间以Json对象的形式安全的传递信息。接下来通过本文给大家介绍springSecurity+jwt实现互踢功能,需要的朋友可以参考下
    2022-07-07
  • 使用jaxp进行dom解析_动力节点Java学院整理

    使用jaxp进行dom解析_动力节点Java学院整理

    这篇文章主要介绍了使用jaxp进行dom解析的相关资料,需要的朋友可以参考下
    2017-08-08
  • java编译器的基础知识点

    java编译器的基础知识点

    在本篇文章里小编给大家整理的是一篇关于java编译器的基础知识点内容,有兴趣的朋友们可以阅读下。
    2020-02-02
  • Hibernate+JDBC实现批量插入、更新及删除的方法详解

    Hibernate+JDBC实现批量插入、更新及删除的方法详解

    这篇文章主要介绍了Hibernate+JDBC实现批量插入、更新及删除的方法,结合实例形式较为详细的分析了Hibernate与JDBC针对数据库的批量操作相关实现技巧,需要的朋友可以参考下
    2017-11-11
  • JAVA+Struts2获取服务器地址的方法

    JAVA+Struts2获取服务器地址的方法

    这篇文章主要介绍了JAVA+Struts2获取服务器地址的方法,是Struts2的一个简单应用,具有一定的借鉴与参考价值,需要的朋友可以参考下
    2014-11-11
  • springboot的EnvironmentPostProcessor接口方法源码解析

    springboot的EnvironmentPostProcessor接口方法源码解析

    这篇文章主要介绍了springboot的EnvironmentPostProcessor接口方法源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • java实现选择排序算法

    java实现选择排序算法

    本篇文章介绍直接选择排序算法的JAVA实现。直接选择排序算法的基本思想是:n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果
    2015-04-04
  • Java 实战项目锤炼之小区物业管理系统的实现流程

    Java 实战项目锤炼之小区物业管理系统的实现流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+SSM+jsp+mysql+maven实现一个小区物业管理系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • Java中Cglib代理和JDK代理的区别详解

    Java中Cglib代理和JDK代理的区别详解

    这篇文章主要介绍了Java中Cglib代理和JDK代理的区别详解,Cglib代理功能更强,无论目标类是否实现了接口都可以代理,他是基于继承的方式来代理目标类,如果目标类也实现了接口,代理类也会实现一次,需要的朋友可以参考下
    2023-09-09
  • Java遍历文件夹及子目录代码实例

    Java遍历文件夹及子目录代码实例

    这篇文章主要介绍了Java遍历文件夹及子目录代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07

最新评论