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

目录
  • 模板方法模式
    • 应用场景
    • 主要角色
    • 优缺点
  • 模板方法模式的基本使用
    • 创建抽象模板角色
    • 创建具体实现
    • 客户端调用

模板方法模式

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

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

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

应用场景

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

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

(0)

相关推荐

  • Java设计模式模板方法模式(Template)用法解析

    这篇文章主要介绍了Java设计模式模板方法模式(Template)用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前言: 我们在开发中有很多固定的流程,这些流程有很多步凑是固定的,比如JDBC中获取连接,关闭连接这些流程是固定不变的,变动的只有设置参数,解析结果集这些是根据不同的实体对象"来做调整",针对这种拥有固定算法流程,其中有固定的步凑,存在不固定的步凑的情况下就诞生了模板方法模式. 模板方法模式(Template)定义

  • 深入理解Java设计模式之模板方法模式

    目录 一.什么是模板方法模式 二.模板方法模式的使用场景 三.模板方法模式的优缺点 四.模板方法模式的实现 五.总结 一.什么是模板方法模式 模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤的实现延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中某些步骤的具体实现. 看到"设计模式"这四个字我们往往会觉得高深莫测,但是模板方法模式却是一个例外,你要关注的就是一个方法而已. 模板方法模式确实非常简单,仅仅使用继承机制,但是它是一个应用非常广泛的模式. 二.

  • Java设计模式之模板方法详解

    目录 概念 核心设计要点 优缺点 应用场景 模板方法和策略模式的区别 代码案例 概念 模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术,没有关联关系.因此,在模板方法模式的类结构图中,只有继承关系. 核心设计要点 AbstractClass:抽象类,定义并实现一个模板方法.这个模板方法定义了算法的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类去实现. ConcreteClass:实现实现父类所定义的一个或多个抽象方法.. 优缺点 优点 利用模板方法将相同处理逻

  • Java经典设计模式之模板方法模式定义与用法示例

    本文实例讲述了Java设计模式之模板方法模式.分享给大家供大家参考,具体如下: 我们在生活中,很多事情都包含特定的一些步骤.如去银行办理业务,通常步骤的次序是:取号 –> 填单 –> 等待叫号–>办理业务.这几个步骤中,有的是不变的,比如取号,每个人都要取,但有的是要变的,比如都有填单,但是根据不同的业务,填写的单据不同.又比如我们外出吃饭,一般的步骤是:点餐–>等待–>吃饭–>付钱,也能发现同样的规律.这样的事情数不胜数. 项目开发中,也可能遇到这样的情况,多个功能模

  • Java设计模式之java模板方法模式详解

    目录 模板方法模式 介绍 角色 代码演示 模板方法模式总结 优点 缺点 适用场景 源码分析模板方法模式的典型应用 Servlet 中的模板方法模式 Hello World! Spring中的IOC容器启动-refresh()方法 参考文章 总结 模板方法模式 在程序开发中,经常会遇到这种情况:某个方法要实现的算法需要多个步骤,但其中有一些步骤是固定不变的,而另一些步骤则是不固定的.为了提高代码的可扩展性和可维护性,模板方法模式在这种场景下就派上了用场. 譬如制作一节网课的步骤可以简化为4个步骤:

  • Java设计模式之浅谈模板方法模式

    一. 什么是模板方法设计模式 从字面意义上理解, 模板方法就是定义出来一套方法, 作为模板, 也就是基础. 在这个基础上, 我们可以进行加工,实现个性化的实现.比如:一日餐三. 早餐, 中餐, 晚餐. 每个人都要吃三餐, 但每个人的三餐吃的可能都不一样. 一日三餐定义了模板--早中晚, 每个人的三餐就是模板的具体实现. 1.1 模板方法的用途 将不变的行为从子类搬到超类,去除了子类中的重复代码.规范子类的结构 1.2 模板方法的定义 定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得

  • java设计模式之模板方法模式详解

    一.什么是模板方法模式 概念:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 通俗的讲,模板方法模式是通过把不变行为搬到超类,去除子类里面的重复代码提现它的优势,它提供了一个很好的代码复用平台.当不可变和可变的方法在子类中混合在一起的时候,不变的方法就会在子类中多次出现,这样如果摸个方法需要修改则需要修改很多个,虽然这个这个问题在设计之初就应该想好.这个时候模板方法模式就起到了作用了,通过模板方法模式把这些重复出现的

  • 分析设计模式之模板方法Java实现

    目录 一.什么是模板方法设计模式 1.1.模板方法的用途 1.2.模板方法的定义 二.定义模板方法的步骤 2.1.定义模板类 2.2.定义具体子类 2.3.定义客户端调用 2.4 下抽象类和子类之间的UML图和源码实现 三.案例 3.1.案例1: 一日规划 3.2.案例2: 钩子方法 四.模板方法的优缺点 4.1.优点 4.2.缺点 五.使用场景 六.对设计模式六大原则的应用思考 一.什么是模板方法设计模式 从字面意义上理解, 模板方法就是定义出来一套方法, 作为模板, 也就是基础. 在这个基础

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

    目录 模板方法模式 应用场景 主要角色 优缺点 模板方法模式的基本使用 创建抽象模板角色 创建具体实现 客户端调用 模板方法模式 模板方法模式属于行为型设计模式.它是指定义一个操作中的算法的框架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模板方法模式实际上是封装了一个固定流程,该流程由几个步骤组成,具体步骤可以由子类进行不同实现,从而让固定的流程产生不同的结果. 模板方法模式的本质是抽象封装流程,具体进行实现. 应用场景 当完成一个操作具有固定的

  • Java结构型设计模式之适配器模式详解

    目录 适配器模式 分类 应用场景 优缺点 主要角色 类适配器 创建目标角色(Target) 创建源角色(Adaptee) 创建适配器(Adapter) 客户端调用 对象适配器 创建目标角色(Target) 创建源角色(Adaptee) 创建适配器(Adapter) 客户端调用 接口适配器 创建目标角色(Target) 创建源角色(Adaptee) 创建适配器(Adapter) 客户端调用 适配器模式 适配器模式(Adapter Pattern)又叫做变压器模式,属于结构型设计模式. 它的功能是将

  • 深入理解JavaScript系列(41):设计模式之模板方法详解

    介绍 模板方法(TemplateMethod)定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模板方法是一种代码复用的基本技术,在类库中尤为重要,因为他们提取了类库中的公共行为.模板方法导致一种反向的控制结构,这种结构就是传说中的"好莱坞法则",即"别找找我们,我们找你",这指的是父类调用一个类的操作,而不是相反.具体体现是面向对象编程编程语言里的抽象类(以及其中的抽象方法),以及继承

  • Java创建型设计模式之工厂方法模式深入详解

    目录 简单工厂模式 定义产品对象 创建工厂类 工厂使用反射 工厂方法模式 概述 应用场景 优缺点 主要角色 工厂方法模式的基本使用 创建抽象产品 创建具体产品 创建抽象工厂 创建具体工厂 客户端执行 简单工厂模式 简单工厂模式(Simple Factory Pattern)是指由一个工厂对象决定创建出哪一种产品类的实例,但是它不属于设计模式. 简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心. 定义产品对象 public interf

  • Java行为型设计模式之策略模式详解

    目录 1.策略设计模式定义 2.策略设计模式的有点与不足 3.策略设计模式的实现思路 4.代码示例 5.策略设计模式的应用场景 编程是一门艺术,大批量的改动显然是非常丑陋的做法,用心的琢磨写的代码让它变的更美观. 在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如超市促销可以釆用打折.送商品.送积分等方法. 在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有快速排序.归并排序.选

  • Java行为型设计模式之外观设计模式详解

    目录 1.外观设计模式定义 2.外观设计模式优点与不足 3.外观设计模式的实现思路 4.外观设计模式代码示例 5.外观模式的应用场景 编程是一门艺术,大批量的改动显然是非常丑陋的做法,用心的琢磨写的代码让它变的更美观. 在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了. 软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂.这时如果系统内部发生改变,客户端也要跟着改变,

  • Java动态代理(设计模式)代码详解

    基础:需要具备面向对象设计思想,多态的思想,反射的思想: Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架.通过阅读本文,读者将会对Java动态代理机制有更加深入的理解.本文首先从Java动态代理的运行机制和特点出发,对其代码进行了分析,推演了动态生成类的内部实现. 代理模

  • Java设计模式之装饰模式详解

    一.装饰模式引入例子 一个快餐店计算价格问题举例: 快餐店有炒面.炒饭这些快餐,可以额外附加鸡蛋.火腿.培根这些配菜,加配菜需要额外加钱,并且每个配菜的价钱不一样,计算快餐价格如何实现? 1.1 一般设计 1.2 使用继承方式的一般设计存在的问题 横向扩展性不好:如果要再加一种配料(火腿肠),我们就会发现需要给FriedRice和FriedNoodles分别定义一个子类.如果要新增一个快餐品类(炒河粉)的话,就需要定义更多的子,会出现类爆炸的问题. 继承适合于纵向扩展 二.装饰模式 2.1 装饰

  • Java 设计模式之适配器模式详解

    目录 定义 结构图 使用场景 代码实现 Java代码实现 Python代码实现 定义 适配器将一个类的接口,转换成客户期望另一个接口.适配器让原本不兼容的类可以合作无间 结构图 如图所示,两脚插头如何能插入三脚插座,可以在中间加一个适配器进行转换,就能实现两脚插头能插入三脚插座. 使用场景 新的代码兼容旧的代码 使用别人好的代码到自己的代码中 代码实现 适配器模式有:对象适配器和类适配器 Java代码实现 java没有多继承,只能实现对象适配器 先创建两个接口 // 适配目标接口 public

随机推荐