java设计模式——TemplateMethod模式

从零开始VCS+Verdi 安装过程 从零开始VCS+Verdi 安装及破解过程 主要参考:VCS+Verdi 安装及破解过程(CentOS7)-----FPGA开发 1. 安装文件结构 –vcs-mx_vL-2016.06 –verdi_vL-2016.06-1 –scl_v11.9 #此程序统一管理license等破解文件 –SynopsysInstaller.rar #此程序用于安装以上3个程序 –sc... 阅读详情

模式定义

所谓模板方法模式就是带有模板功能的模式,组成模板的的方法定义在的父类中。父类是一个抽象类,提供基本的抽象方法,并且提供一个子类不可复写的方法使用一定的算法包装需要子类实现的抽象方法。通过查看父类的代码,我们只能知道某个功能的基本实现算法,不能知道关键步骤(也就是抽象方法)的是实现,唯一能知道的就是父类是怎么调用这些方法的。

实际的例子

我们需要实现两种形式的字符显示,第一种是直接显示字符,第二种是显示字符串,显示的方式是首先打开可以显示的对象,然后将显示内容循环显示5遍,最后关闭显示对象。
使用模版方法设计这个过程,我们需要下面的几个类:

  1. AbstractDisplay
  2. CharDisplay
  3. StringDisplay
  4. Main
    AbstractDisplay这个类定义了display方法,而且在该方法中依次调用了open,print,close这3个方法。虽然这个三个方法在AbstractDisplay中申明了,但是只是没有实现的抽象方法。这里,调用抽象方法的display就是模板方法。
    而实际上实现了open,print,close这三个抽象方法的就是CharDisplay、StringDisplay这两个类,Main类是用于测试客户端类。
    这几个类之间的关系如下类图:
    这里写图片描述
    下面我们直接看下源代码。

AbstractDisplay

/*************************************************************************
    > File Name: AbstractDisplay.java
    > Author: CreateChance
    > Mail: createchance@163.com 
    > Created Time: Mon Mar 12 11:44:15 2018
 ************************************************************************/
public abstract class AbstractDisplay {
    protected abstract void open();
    protected abstract void print();
    protected abstract void close();

    /**
     * 此方法为final的目的就是防止子类重写实现算法,
     * 这个算法应该是模板中定义好的,然后子类负责实现具体的步骤代码就好
     */
    public final void display() {
        open();

        for (int i = 0; i < 5; i++) {
            print();
        }

        close();
    }
}

CharDisplay

/*************************************************************************
    > File Name: CharDisplay.java
    > Author: CreateChance
    > Mail: createchance@163.com 
    > Created Time: Mon Mar 12 11:46:13 2018
 ************************************************************************/
public class CharDisplay extends AbstractDisplay {
    private char ch;

    public CharDisplay(char ch) {
        this.ch = ch;
    }

    @Override
    protected final void open() {
        System.out.println("Char display opened!");
    }

    @Override 
    protected final void print() {
        System.out.println("char: " + ch);
    }

    @Override
    protected final void close() {
        System.out.println("Char display closed!");
    }
}

StringDisplay

/*************************************************************************
    > File Name: StringDisplay.java
    > Author: CreateChance
    > Mail: createchance@163.com 
    > Created Time: Mon Mar 12 11:49:52 2018
 ************************************************************************/
public class StringDisplay extends AbstractDisplay {
    private String str;

    public StringDisplay(String str) {
        this.str = str;
    }

    @Override
    protected final void open() {
        System.out.println("String display opened!");
    }

    @Override
    protected final void print() {
        System.out.println("String: " + str);
    }

    @Override 
    protected final void close() {
        System.out.println("String display closed!");
    }
}

Main

/*************************************************************************
    > File Name: Main.java
    > Author: CreateChance
    > Mail: createchance@163.com 
    > Created Time: Mon Mar 12 11:52:05 2018
 ************************************************************************/
public class Main {
    public static void main(String argvs[]) {
        /**
         * 使用父类抽象类来访问实际的实现类,面向抽象和接口编程
         * 符合里氏代换原则
         */
        AbstractDisplay d1 = new CharDisplay('a');
        AbstractDisplay d2 = new StringDisplay("hello");

        d1.display();
        System.out.println();
        d2.display();
    }
}

模式角色

模版方法模式的涉及的角色有:

AbstractClass(抽象类)

抽象类不仅负责实现模板方法,还负责声明在模板方法中所使用到的抽象方法。这些抽象方法由子类ConcreteClass角色实现。在示例程序中AbstractDisplay类扮演此角色。

ConcreteClass(具体类)

该角色负责实现AbstractClass角色中定义的抽象方法,是AbstractClass子类。这里实现的方法将会在AbstractClass角色的模板方法中被调用,在上面的例子中CharDisplay和StringDisplay类扮演此角色。

模式要点

使逻辑处理通用化

使用模板方法模式的优点就是可以在父类的模板方法中编写好算法,并且无需在每个子类中再次编写算法,方便算法在各个子类中高度复用。
如果发现算法有bug,我们只需要修改父类的模板方法实现即可,不用到处修改每一个子类实现。

父类和子类之间的协作

在模板方法模式中,父类和子类是紧密联系,共同工作的。因此,在子类实现父类中的抽象方法时,必须明确这些方法被调用的时机,否则将无法编写有效的代码。因此,这就要求编写子类的时候必须知道父类的实现,因此该模式通常用于一个模块的内部,用户实现模块内部的高内聚架构。

【GameFramework框架内置模块】6、实体(Entity) 实体Entity就是一个实体的基本单元,类似于Unity的GameObject对象本体,然后这个本体上面附加其他各种各样组件,才能实现各种各样的功能。一般需要在游戏运行时动态加载的游戏对象,比如怪物、武器、子弹、特效,都需要给这个物体挂载一个实体Entity,这样的话就可以方便的对实例出来的对象进行管理。下面就来看一下如何使用吧。 阅读详情

相关推荐

MT4-EA自动化交易研究笔记(2022-04-22)

自从接触到mt4的EA自动化交易,更让我这个10多年的老程序员看到了曙光,目前来看也确实出了一点成果,只是是否能稳定盈利有待时间的考验,所以开此专栏,一来做做记录与分析,更好的优化我的EA,二来也希望能与更多的高手交流,以完善我的交易系统

t35254056的博客 2291

Java设计模式-模板模式Template

选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的(红豆、花生豆浆。制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎。通过添加不同的配料,可以制作出不同口味的豆浆。

老徐的博客只有干货 1911

深入解析磁盘性能测试:vdbench与fio的实战对比

本文深入对比了磁盘性能测试两大工具vdbench与fio的核心定位与实战应用。vdbench擅长多客户端、可编排的存储系统集成测试,而fio则以灵活的单机深度定制见长,是测试硬件极限和模拟特定应用IO模型的利器。文章通过安装指南、参数解析和典型场景对比,帮助读者根据需求选择合适工具,精准评估磁盘性能。

weixin_29300931的博客 322

java template模板_Java设计模式——Template模板模式

Template模板模式可以这样理解:一个抽象类公开定义了执行它的方法的方式/模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。通俗来说,可以这样理解: 定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。比如:完成一件事情,有固定的数个步骤,但是每个步骤根据对象的不同,而实...

weixin_29890207的博客 719

SAP ATP检查全解析:从配置到BAPI_RESERVATION_CREATE1应用实例

本文全面解析SAP ATP检查功能,从基础配置到BAPI_RESERVATION_CREATE1高级应用,涵盖物料可用性检查、动态规则设置及性能优化策略。通过实战案例演示如何利用BAPI_MATERIAL_AVAILABILITY实现精准库存承诺,提升供应链效率,特别适合SAP顾问和库存管理人员参考。

dropout6artist的博客 677

Modbus4J vs EasyModbus4J:哪个Java库更适合你的工业项目?

本文深入对比了Java领域两大Modbus通信库Modbus4J与EasyModbus4J。Modbus4J设计稳健、类型安全,适合复杂业务集成;EasyModbus4J基于Netty,在高并发场景下性能更优。文章从架构、性能、API及生产环境多维度分析,为工业物联网项目选型提供决策依据。

weixin_28475533的博客 310

JAVA设计模式之模板模式

设计模式 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、...

bernardGao94的博客 1754

从命名玄学看单片机江湖:STC、STM32与ESP32的型号密码与设计哲学

本文解析了STC、STM32和ESP32三大主流单片机系列的型号命名规则,揭示了其背后的设计哲学与市场策略。通过详细解读STC89C52、STM32F103C8T6等具体型号,帮助开发者理解芯片核心特性、性能等级及适用场景,为嵌入式系统选型提供实用指南。

g5h6i的博客 761

Java设计模式—模板模式(Template)

模板模式 业务需求 编写豆浆制作程序 选材-添加配料-浸泡-豆浆机打碎 选材、浸泡、打碎这几步对于制作不同豆浆都是一样的 比较简单,这里不再使用传统方法,直接上设计模式 模板模式基本介绍 模板模式,在一个抽象类公开定义了执行他的方法的模板;他的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行 简单说,模板模式定义一个操作中的算法骨架,将一些步骤延迟到子类中,使子类可以不改变一个算法结构,就可以重新定义该算法的某些特定步骤 模板模式属于行为型模式 原理类图 原理类图说明 Abstrac

super_song的博客 1172

dy创作者平台上传并发布视频

整体上来说不是很难,就是过程有点复杂。因为这个是别人给的单子,所以这里不放源码了。细致一点就可以搞定。如果要Signature算法,可私信,不免费。

记录一些web逆向的过程 1515

Python爬虫实战:如何抓取POI信息(公共场所)位置信息

获取公共场所的信息:如餐厅、商店、医院、景点等。抓取POI的基本信息:如名称、类别、地址、评分等。获取POI的地理坐标:经度和纬度信息。存储POI数据:将抓取到的POI信息存储到本地数据库中。通过本篇文章,我们详细介绍了如何使用Python爬虫抓取POI信息。通过Google Maps API和OpenStreetMap(Overpass API),我们展示了如何获取餐厅、商店、医院等公共场所的位置信息,并进一步探讨了如何处理分页、存储数据以及反爬虫策略。

2201_76125261的博客 378

Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式

1、 若又有一个任务需要执行,直接继承 BaseTaskTemplate 类即可,重写 exec 方法;需要配置锁资源 , 重写 beforeExec 和 afterExec 方法;需要配置 开关 , 重写 setEnable 方法,加上 @Value 注解即可2、beforeExec 、afterExec 方法,是参考 线程池 ThreadPoolExecutor 的 实现, 如下:Spring @Value 赋值。

HaHa_Sir的博客 3606

开源鸿蒙具身机器人(ROS2框架):从内核驱动到智能算法的完整实践

本指导文档旨在为开发者提供完整的开源鸿蒙(OpenHarmony)具身机器人开发解决方案,涵盖从底层驱动到上层ROS2应用的全栈开发流程。文档结合OpenHarmony内核驱动移植技术和ROS2机器人操作系统,为具身机器人开发提供详细的技术指导。具身机器人(Embodied Robot)是指具有物理实体、能够感知环境并与之交互的智能机器人系统。感知-决策-执行闭环多模态传感器融合(视觉、听觉、触觉、力觉)实时环境感知与理解智能决策与规划精确运动控制执行具身智能特性物理世界交互能力。

m0_67505153的博客 1268

设计模式(JAVA)——TemplateMethod模式

设计模式(JAVA)之TemplateMethod模式

读书 好学 求知 203

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

对于Java设计模式TemplateMethod模式的小白理解

1.模板方法模式的概念 一个抽象类中,有一个主方法,再定义1…n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用 2.模板方法模式的结构 AbstractClass:实现一个模板方法,定义了算法的骨架,具体子类将重定义PrimitiveOperation以实现一个算法的步骤。AbstractClass其实就是一个抽象模板,定义并实现...

Vanity_xiye的博客 253

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java设计模式之模板方法模式(TemplateMethod)

1. 模板方法模式 1.1 定义 模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。(引自《大话设计模式》) 1.2 基本结构图 1.3 模式理解 从类图中可看出,该模式的核心就是继承。 举个栗子,可以更加直观的理解。比如说,现在有学生a、学生b,现在学习制作蛋糕,制作蛋糕的步骤大致为: ...

zaoan_2010的专栏 313

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java设计模式---templateMethod模式

模板模式简单,直接上代码概念。 //测试实现的主体类 public class templateMethod { public static void main(String[] args) { F f = new C(); f.method(); } } //抽象父类方法 abstract class F{ void method(){ operation1(); operation2(); }

去武帝城,战王仙芝 253

设计模式(4)Java_templateMethod

设计模式(4)Java_templateMethod 1.定义模板类(abstractClass) package com.lius.patternDesign.templateMethod; /** * templateMethod 模板方法 * 利用抽象函数与定义一套函数执行主流程, * 实现一些变化点延迟实现,交由子类来处理 * @author lius * */ public abstract class templateMethod { //函数执行控制主流程(模板方法的核心.

MUTONG的博客 172

Java设计模式——模版方法(TemplateMethod)

我觉得代码的核心部分是这块: code是一个父类的抽象方法,因为里面的内容是多变的。 譬如这个地方,我想测1000以内质数运行时间,我就可以在子类重写的code方法中写code{输出1000以内的质数},这样达到子类对象调用spendTime方法时,先获取start时间,再调用子类code,再获取结束时间,然后输出,很灵活。 下面举了一个医院银行例子,想说明那种流水化作业的效果 那么模版方法的设计模式究竟是咋样,,?我猜应该就是下面这一块,要是面试问到了,就给他写出来,嘻嘻嘻 ...

不会敲代码的笨兔子 307

java 模板方法设计模式(TemplateMethod)

java 模板方法设计模式(TemplateMethod)1.模板方法设计模式(TemplateMethod)2.模板方法的实现 1.模板方法设计模式(TemplateMethod) 抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。 TemplateMethod使得子类可以不改变一个算法的结构即可重定...

码农回顾 251

设计模式之TemplateMethod模板方法(高级源码案例)

我是 [闲人球] 这个名字是由我的梦想(闲云野鹤)与外号(球球)组合而成,是一个热爱生活、热爱技术的"橡皮擦girl " 这博客是对自己学习的一丢丢总结及记录,如果您对 Java、算法、架构感兴趣,可以关注我的动态,我们一起学习。 快乐学习,认真生活;心中有爱,眼里有光 TemplateMethod (钩子函数、回调函数就是模板方法这种模式),这种方法其实我们一直在用,如: ClassLoader findClass() HttpServlet doGet() doPost() 凡.

闲人球 363

Java中模板方法设计模式(TemplateMethod)

抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模 板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象 类的行为方式。 解决的问题:  当功能内部一部分实现是确定的,一部分实现是不确定的。这时可以 把不确定的部分暴露出去,让子类去实现。  换句话说,在软件开发中实现一个算法时,整体步骤很固定、通用, 这些步骤已经在父类中写好了。但是某些部分易变,易变部分可以抽 象出来,供不同子类实现。这就是一种模板模式。 package com.atguigu.java; /* * 抽象类的应

dwjdj的博客 171

Java 设计模式之TemplateMethod模板方法模式

在含有继承结构的代码中,模板方法模式是非常常用的,这也是在开源代码中大量被使用的。通常会有一个抽象类: public abstract class AbstractTemplate { // 这就是模板方法 public void templateMethod(){ init(); apply(); // 这个是重点 end();.........

zhaoyang10的专栏 287

java 模板方法设计模式(TemplateMethod)

模板设计模式: 抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造, 说明: 相同的部分放在父类中 不同的部分写成抽象方法由子类去实现 abstract class SuperClass{ public void runTime(){ //1.开始时间 long start = System.currentTimeMillis(); //获取当前时间 到1970.1.1 0时0分0秒所经历的毫秒数 //2.执行代码 this.runCode(); //sc.runCod.

超级大洋葱的博客 251

Java设计模式之—Template Method模式(模板模式)

Java设计模式之—Template Method模式(模板模式) Template Method模式是带有模板功能的模式。组成模板的方法被定义在父类中。在父类中定义处理流程的框架,在子类中具体处理。 AbstractDisplay类(抽象类) public abstract class AbstractDisplay { public abstract void open(); publi...

weixin_40649194的博客 275

java 设计模式之TemplateMethod(模板方法模式)

模板方法 模板方法思想:模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。 用大白话来说:就是把重复的抽取出来,不一致的单独实现! 假设我们不使用模板方法设计模式 场景: (1)我们做一个电商系统中商品有一个需求 (2)一个商品有多种优惠政策 (3)但是不同的优惠政策在计算价格时,都有一些通用的基础计算逻辑 (4)每种优惠

weixin_43755155的博客 240
上一篇: java设计模式——导引
下一篇: java设计模式——FactoryMethod模式
createchance
博客等级 码龄15年 156粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值