JAVA设计模式-模板方法模式

【Java设计模式】Java设计模式之(十三)模板方法模式(Template Method Pattern) 状态模式属于行为型模式。在模板方法模式(Template Method Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 一、模板方法模式介绍 1.1 模式意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 1.2 通用类图 二、模版方法模式的应用 所有设计模式的代码实现例子都可在码云上查看哦,感兴趣的可以查看哈,码云地址:h 阅读详情

模板方法模式

概述

定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。

参与者
  1. 抽象模板
  2. 具体模板
实现
  1. 抽象模板定义一些了抽象模板方法,而这些方法交由子类去实现
  2. 具体模板继承抽象模板,并重写抽象模板的模板方法
效果

客户端继承抽象模板,实现一个它的一个子类具体模板,并根据具体需求重写抽象模板的模板方法


实例

现在有一个算法框架,定义了排序和搜素元素两个抽象方法,而具体的实现则交由客户端实现继承它的子类再去具体实现,至于子类采用什么样的排序和搜索算法,会由客户端自己决定。

现有如下几个角色:

  1. 抽象模板:AbstractAlgorithmTemplate,定义排序方法sortContent和搜索方法findElement,还有一个showResult方法,并且在这个方法内部规定了先排序,后搜索的操作。
  2. 具体模板:ConcretAlgorithm,继承父类AbstractAlgorithmTemplate,并实现排序和搜索方法

下面来看一下具体的代码实现

一、抽象模板:AbstractAlgorithmTemplate.java
public abstract class AbstractAlgorithmTemplate {

    protected abstract void sortContent(int[] array);
    protected abstract int findElement(int[] array,int e);
    public void showResult(int[] array) {
        System.out.println("排序开始 :");
        sortContent(array);
        int pos = findElement(array,2);
        System.out.println("搜索元素 : 2"+" ; 位置为 : "+pos);
    }

}
二、具体模板:ConcretAlgorithm.java

public class ConcretAlgorithm extends AbstractAlgorithmTemplate {

    @Override
    protected void sortContent(int[] a) {
        //这里采用选择排序
        int minIndex=0;
        int temp=0;
        if((a==null)||(a.length==0))
            return;
        for (int i=0;i<a.length-1;i++) {
            minIndex=i;//无序区的最小数据数组下标
            for (int j=i+1;j<a.length;j++) {
                //在无序区中找到最小数据并保存其数组下标
                if(a[j]<a[minIndex])
                {
                    minIndex=j;
                }
            }
            if(minIndex!=i) {
                //如果不是无序区的最小值位置不是默认的第一个数据,则交换之。
                temp=a[i];
                a[i]=a[minIndex];
                a[minIndex]=temp;
            }
            printArray(a);
            System.out.println("");
        }

    }

    protected int findElement(int[] array,int e) {
        //这里采用二分搜索
        int l = 0,h = array.length-1;
        int m = (l+h)/2;
        int pos = -1;
        while (l<h) {
            m = (l+h)/2;
            if(array[m]<e) {
                l = m+1;
            } else if (array[m]>e) {
                h = m-1;
            } else {
                return m;
            }
        }

        return pos;
    }

    private static void printArray(int[] array) {
        for (int i = 0; i < array.length; i++){
            System.out.printf("%3s", array[i]);
        }
    }
}
三、下面来测试一下

/**
 * 测试:模版方法模式
 * @author wxp
 *
 */
public class TestTemplate
{
  public static void main(String[] args)
  {
    int[] array = new int[]{1,3,2,4,6,7,5};
    AbstractAlgorithmTemplate abstractQuadrant = new ConcretAlgorithm();
    abstractQuadrant.showResult(array);
  }
}

编译运行结果:

排序开始 :
  1  3  2  4  6  7  5
  1  2  3  4  6  7  5
  1  2  3  4  6  7  5
  1  2  3  4  6  7  5
  1  2  3  4  5  7  6
  1  2  3  4  5  6  7
搜索元素 : 2 ; 位置为 : 1

实例源码:https://github.com/whisper92/wxpdesignpattern/tree/master/src/java/template


THE END.

Java行为型设计模式-模板方法模式 模板方法模式是一种行为型设计模式,用于创建方法存根并将一些实现步骤推迟到子类。模板方法定义执行算法的步骤,并且可以提供默认实现,该实现可能对所有或部分子类通用。模板方法模式是软件工程中一个常用的设计模式,其定义了一个操作的算法骨架,将某些步骤推迟到子类中实现。模板方法使得子类可以不改变算法结构的情况下重定义某些步骤的具体实现。综上,在Java中,模板方法模式是一种行为型设计模式,它定义了一个算法的骨架,将某些步骤延迟到子类中实现。这样,子类可以不改变算法结构的同时,重新定义这些步骤。模板方法模式的。 阅读详情

相关推荐

AUTO-DL平台快速部署BEVFormer:Nuscenes数据集完整训练避坑指南

本文详细介绍了在AUTO-DL平台高效部署BEVFormer模型并利用Nuscenes数据集进行完整训练的实战指南。重点解析了平台数据管理、环境配置、数据集迁移解压、预处理及训练启动等全流程中的关键步骤与常见避坑技巧,帮助研究者和工程师快速复现这一前沿视觉感知模型,节省云端训练时间与成本。

weixin_29188043的博客 335

Java设计模式——模板方法模式【Template Method Pattern】

Java设计模式、模板方法模式、Template Method Pattern

scorpio的博客 3万+

基于N32G003的PMBus从机协议栈设计与STM32F103模拟I2C主机通信实战

本文详细介绍了基于N32G003微控制器设计PMBus从机协议栈,并与STM32F103模拟I2C主机进行通信的实战方案。重点阐述了中断驱动架构、命令解析、CRC8优化及超时恢复机制,实现了在70kHz速率下稳定可靠的工业电源管理通信,适用于服务器电源、通信基站等成本敏感应用场景。

numpy6sculptor的博客 920

Java设计模式之模板方法模式(Template Method Pattern)

假设需要实现制作茶和咖啡的流程,两者步骤类似(烧水、冲泡、倒入杯子),但具体冲泡方法和添加调料不同。:框架定义通用流程,允许用户自定义部分步骤(如Servlet生命周期、JUnit测试流程)。:当多个类有相似的流程,但某些步骤实现不同时(如数据处理流程、文件解析流程)。:适用于具有固定流程但部分步骤需要定制的场景,如框架扩展、多态流程处理。,用于定义算法的骨架,将某些步骤的具体实现延迟到子类中。:通过父类定义算法流程,子类灵活实现具体步骤,实现代码复用和流程控制。方法为模板方法,由框架调用。

guanxin0206的博客 673

libfranka---joint_impendence_control例程分析

joint_impedance_control.cpp例程分析 部分内容来自链接,我个人以初学者的角度对代码进行了更加细致的解释。 核心部分: // Set and initialize trajectory parameters. const double radius = 0.05; const double vel_max = 0.25; const double acceleration_time = 2.0; const double run_time = 20.0; d

weixin_41567783的博客 1123

手把手教你学PCIE(2.1.8)--pcie基本概念流量控制(Flow Control, FC)

PCIe 的流量控制(Flow Control, FC)是确保数据传输可靠性和高效性的关键技术。通过信用值管理,发送方和接收方可以动态调整数据传输速率,避免数据丢失和溢出。理解流量控制的工作原理和实现机制对于开发和调试 PCIe 系统非常重要。希望这个介绍能帮助你更好地理解和使用 PCIe 流量控制。

MHD0815的博客 1809

Java设计模式 二十 模板方法模式 (Template Method Pattern)

模板方法模式通过定义算法的框架,将部分步骤的实现推迟到子类,使得子类能够在不改变算法结构的前提下,定制某些具体步骤。它是一个非常适用于处理具有固定执行顺序的算法的设计模式。模板方法模式提高了代码复用性和扩展性,但同时也带来了继承关系的复杂化,需要在合理的场景下使用。

空 979

1.嵌入式控制器EC学习,编译环境搭建

工欲善其事,必先利其器。 在学习EC相关知识之前,首先需要完成EC代码编译环境的搭建,需要如下内容: Keil C51(用于EC中C代码的编译器环境) EC源代码,我们使用从网上可以下载到的 ITE_V12.4_Update 版的代码为例进行学习 代码编辑器,这个可以根据自己的习惯选择,VS Code或者Source Insight等 Keil C51下载地址: http://www.downcc.com/soft/307131.html 下载完成后请进行破解 EC源代码 ...

qq_30135687的博客 3918

JAVA设计模式之 模板方法模式【Template Method Pattern】

一、概述 二、适用chuangk

小吕丶Code阶区 3482

YOLO系列算法改进 | 自研篇 | C3k2融合SEFN空间增强前馈网络模块 | 去模糊和提升图像细节特征,精度涨点!| WACV 2025

YOLO系列算法改进 | 自研篇 | C3k2融合SEFN空间增强前馈网络模块 | 去模糊和提升图像细节特征,精度涨点!| WACV 2025 (以YOLO26最新目标检测模型为基础,C3k2融合SEFN空间增强前馈网络模块改进Backbone)

2502_91881744的博客 241

安装 miniconda linux

安装 miniconda linux

jacke121的专栏 1万+

设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 模板方法模式(Template Method) - Java实现

设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 模板方法模式(Template Method) 模板定义一个操作中的算法的骨架,具体算法由子类实现。 结果:不改变一个算法的结构,可重定义算法的某些特定步骤。

Z 417

3 路由引入

在大型企业网络中,网络规模十分庞大,选用单一的路由协议无法满足网络的需求,因此多种路由协议共存的情况十分常见。或者出于业务逻辑或行政管理的考虑,会在不同的网络结构中设计和部署不同的路由协议,使路由的层次结构更加清晰可控。路由引入是具有方向性的,将路由信息从路由协议A引入到路由协议B(A-to-B),则路由协议B可获知A中的路由信息,但是此时,A还并不知晓B路由协议中的路由信息,除非配置B-to-A的路由引入。表3-1:各种路由协议的优先级。通过路由引入,可以实现路由信息在不同路由协议间传递。

lwljh134的博客 622

JAVA设计模式——模板方法模式(Template Method Pattern)

概述 模板方法模式属于行为型模式。它由一个抽象类公开定义了执行它的方法的模板(执行的方式或顺序),它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。具体而言就是抽象类定义了某个方法的执行方式或者顺序,但是将该方法中的部分逻辑甚至全部逻辑实现交给具体的子类去实现,实现更高的抽象性。 模式中的角色 1、抽象类(AbstractClass):定义方法的模板,即方法的执行方式和顺序。 2、具体类(ConcreteClass):实现抽象类中的抽象方法,提供具体的执行逻辑。 应用举例 简单来

MitSuiTachi的博客 541

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

WINCC7.3破解文件

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

设计模式之模板方法模式Template Method Pattern-Java版

一、定义 The Template Method Pattern defines the skeleton of an algorithm in a method, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure. 模板方法模式定义了一种算法的框架,将部分步骤

qianmojl的博客 164

SAP B1中文培訓教材_SDK

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

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

    Java设计模式之模板方法模式         时间又是隔了好几天哈,今天又学习了一种设计模式,是模板方法了,这种设计模式在没有了解到之前,但是我们在开发中绝大多数都会不知不觉的用到了,不过我们并不了解我们用到的方法会是一种设计模式,哈哈哈哈,只能说伟大的思想都是共通的;下面来看一下这种设计模式的详细情况吧 一 : 什么是模板方法模式 ?    &nb

weixin_47301645的博客 199

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java设计模式 —— 【行为型模式】模板方法模式(Template Method Pattern) 详解

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

知唔猪的博客 1731

Java设计模式-模板方法模式

摘要:模板方法模式是一种行为型设计模式,通过定义算法骨架(模板方法)并将可变步骤延迟到子类实现,实现代码复用与扩展性的平衡。核心组件包括抽象模板角色(定义流程骨架和基本方法)和具体模板角色(实现差异化步骤)。相比传统实现,该模式能消除冗余代码、规范执行流程,但也可能增加类数量。典型应用场景包括具有固定流程但步骤实现不同的业务(如饮料制作、数据库操作)。模式变体包括钩子方法和参数化模板,最佳实践是保持抽象类稳定并合理设计抽象方法。

weixin_66095070的博客 985

Java23种设计模式 模板方法模式【Template Method Pattern】

本文章转载大佬CBF4LIFE的文章 博客地址:https://www.cnblogs.com/cbf4life/ 周三,9:00,我刚刚坐到位置,打开电脑准备开始干活。  “小三,小三,叫一下其它同事,到会议室,开会”老大跑过来吼,带着淫笑。还不等大家坐稳,老 大就开讲了,  “告诉大家一个好消息,昨天终于把牛叉模型公司的口子打开了,要我们做悍马模型,虽然是第一个 车辆模型,但是我们有能力,有...

宇智波带土 294

java设计模式——模板方法模式(Template Method Pattern)

概述:        模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中,在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行结果。模板方法模式提供了一个模板方法来定义算法框架,而某些具体步骤的实现可以在其子

yj_android_develop的博客 544

java设计模式-模板方法模式

java设计模式-模板方法模式 简单说一下 首先说一下什么是模板方法模式:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类去实现,使得子类可以不改变该算法结构的情况下重新定义该算法的某些特定步骤(是一种行为性模式)。换句话说就是定义一个模板结构,让这个模板结构里边的部分内容去子类里边实现。 顺便举一下 举个栗子说明,比如你去银行办理业务,需要取号、排队、办理业务、评分,这其中取号排队和评分都...

Thinkao 的博客 228

【设计模式】Java 设计模式之模板方法模式(Template Method)

模板方法模式是一种灵活且强大的设计模式,通过抽象类和具体子类的组合,实现算法结构的灵活扩展。它遵循开闭原则,对扩展开放,对修改封闭,提高了代码的可维护性和可扩展性。该模式与面向对象设计的其他原则和实践紧密相关,如单一职责原则和接口隔离原则。然而,在使用时也需注意避免过度使用导致类数量增加。模板方法模式广泛应用于各种实际项目中,如在线支付系统、文件处理、Web开发等,可帮助构建通用的流程并允许自定义逻辑。通过深入理解其原理和注意事项,并结合实际应用,我们可以更好地利用模板方法模式提升软件系统的性能和可维护性。

新手村长的专栏 3644

【设计模式】模板方法模式 在java中的应用

【设计模式】模板方法模式 在java中的应用

qq_42320804的博客 1445
上一篇: JAVA设计模式-观察者模式
下一篇: JAVA设计模式-策略模式
XP-Code
博客等级 码龄12年 113粉丝 194原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值