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

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

一、 模板方法模式的定义

    1、模板方法模式确实非常简单,仅仅使用了Java的继承机制,但它是一个应用非常广泛的模式。

   2、一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用。

   3、主方法可以有一个或多个,一般都是有一个具体的方法来完成固定的逻辑。

   4、注意 抽象模板中的基本方法尽量设计为protected类型,符合迪米特法则,不需要暴露的属性或方法尽量不要设置为protected类型。实现类若非必要,尽量不要扩大父类中的访问权限。


二、 模板方法模式的优点

   1、封装不变部分,扩展可变部分

   2、提取公共的部分,方便我们维护

   3、行为由父类控制,子类实现


三、 模板方法模式的缺点

   按照我们的设计习惯,抽象类负责声明最抽象、最一般的事物属性和方法,实现类完成具体的事物属性和方法。但是模板方法模式却颠倒了,抽象类定义了部分抽象方法,由子类实现,子类执行的结果影响了父类的结果,也就是子类对父类产生了影响,这在复杂的项目中,会带来代码阅读的难度,而且也会让新手产生不适感。


四、 模板方法模式的使用场景

   1、多个子类有公共的方法,并且逻辑基本相同就比如我们下面这个代码

   2、重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。

   3、重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然后约束其行为。


//抽象悍马模型

package com.example.liangshaoteng.myapplication.shejimoshizicandao.danyizhizhe.mobanfangfa;

/**
 * Created by liangshaoteng on 17-7-21.
 */

public abstract class HummerModel {
    //发动
    public abstract void start();
    //停止
    public abstract void stop();
    //喇叭
    public abstract void alarm();
    //引擎
    public abstract void enginBoom();
    //开车
    public abstract void run();
}

悍马模型都必须具有的特质:能够发动、停止,喇叭会响,引擎可以轰鸣,而且还可以停止。

public class HummerH1Model extends HummerModel {
//H1型号的悍马车鸣笛
public void alarm() {
System.out.println("悍马H1鸣笛...");
}
//引擎轰鸣声
public void engineBoom() {
System.out.println("悍马H1引擎声音是这样的...");
}
//汽车发动
public void start() {
System.out.println("悍马H1发动...");
}
//停车
public void stop() {
System.out.println("悍马H1停车...");
}
//开动起来
public void run(){
//先发动汽车
this.start();
//引擎开始轰鸣
this.engineBoom();
//然后就开始跑了,跑的过程中遇到一条狗挡路,就按喇叭
this.alarm();
//到达目的地就停车
this.stop();
}
}

看到这里大家有可能看着没有问题 , 但是我们需要思考一下这是一辆车如果是多辆车的话是不是也要这样写 我们就会发现代码重复行太高了! 所以我们要解决这个问题

注意 在软件开发过程中,如果相同的一段代码复制过两次,就需要对设计产生怀疑,架构师要明确地说明为什么相同的逻辑要出现两次或更多次。


//修改后的抽象悍马模型

package com.example.liangshaoteng.myapplication.shejimoshizicandao.danyizhizhe.mobanfangfa;

/**
 * Created by liangshaoteng on 17-7-21.
 */

public abstract class HummerModel {
    //发动
    public abstract void start();
    //停止
    public abstract void stop();
    //喇叭
    public abstract void alarm();
    //引擎
    public abstract void enginBoom();
    //开车
    public void run(){
        this.start();
        this.enginBoom();
        this.alarm();
        this.stop();
    }
}

主方法运行

public class Client {
public static void main(String[] args) {
    //XX公司要H1型号的悍马
    HummerModel h1 = new HummerH1Model();
    //H1模型演示
    h1.run();
  }
}

运行结果如下所示。
悍马H1发动...
悍马H1引擎声音是这样的...
悍马H1鸣笛...
悍马H1停车...


好了目前是没有问题啦 , 非常清晰我现在告诉你以上的代码就是模板方法模式你是不是感觉这也太简单了吧! 我都是这样写的啊! 当然你是经常使用,但是你不知道这就是模板方法模式


  

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

相关推荐

【低空经济】低空无人驾驶航空器运行管理系统设计方案

低空无人驾驶航空器运行管理系统(以下简称“系统”)旨在为低空域内的无人驾驶航空器(UAV)提供高效、安全、智能的运行管理服务。系统通过集成先进的通信、导航、监控、数据处理和人工智能技术,实现对低空域内无人驾驶航空器的实时监控、动态调度、风险评估和应急响应,确保其在复杂空域环境中的安全运行。系统的核心功能包括空域管理、飞行计划审批、实时监控、冲突预警、应急管理和数据分析。空域管理模块负责划分和管理低空域资源,确保不同飞行任务之间的空域隔离和高效利用。

2502_92579126的博客 1140

java访问控制权限一句话描述版

(1)私有的:用关键字private修饰,只有本类可见。 (2)默认的:不用访问控制符关键字修饰,在本类、本包可见,不同包的子类都不可见。 (3)受保护的:用关键词protected修饰,在本类、本包、所有子类中可见。 (4)公共的:用关键字public修饰,对一切情况皆可见。 public修饰的内容限制最小,也可以说是没有限制,可以在其他任何位置访问,在实际项目开发中,一般用来修

tianxiaoqi2008的专栏 564

EtherCAT从站协议栈---- sampleappl.c 文件解析

这个源文件实际上包含该项目的入口函数main函数。 那么如何找到入口函数呢? 可以进入debug的simulator模式,选中run to main(), 当执行完启动文件startup_cm3.s后就进入了main函数(注意在main函数之前还进入了SystemInit函数), 如下图所示: 这个main函数主要架构如下: int main(void) { HW_Init(); /*PDI(过程数据接口)初始化,这里用的是MCI接.

Jiawei_Z的博客 3066

java小游戏 设计模式_详解JAVA设计模式之模板模式

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。介绍意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。主要解决:一些方法通用,却在每一个子类都重新写了这一方法。何时使用:...

weixin_42615743的博客 484

麒麟操作系统Kylin如何从 2203 升级到 2403

fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;开始升级流程第一步:升级前准备1. 确认版本为 V10 SP1 22032. 备份全部重要数据3. 确保网络稳定4. 关闭应用第二步:选择升级方式方法一:图形界面升级方法二:命令行升级1. 更新现有系统至最新2. 启动“系统升级”工具3. 检测并开始下载2403。

让编程变的很简单!! 2657

泰克示波器TDS210改装便携示波器

泰克示波器TDS210改装编写示波器

超级网吧的博客 3079

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

本文属于23种设计模式系列,介绍的是模板方法模式。

一个本科小生的奋斗史 4万+

YOLOv8【第十章:多任务扩展深度篇·第16节】车道线检测——基于 YOLOv8-Seg 的车道线分割与拟合!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1万+

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

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

scorpio的博客 3万+

【Coze】在Coze平台使用源码创建工作流

Coze平台提供低代码工作流搭建功能,支持通过图形化界面快速构建自动化任务流程。用户可通过资源库创建工作流,导入JSON配置生成节点结构,连接起始节点并配置输入/输出字段(需定义数据类型)。平台提供试运行功能验证流程执行,支持可视化调试与发布上线。该方案适用于快速部署标准化业务逻辑,实现端到端的自动化处理。

Mr数据杨 2430

【unity游戏开发入门到精通——通用篇】Post Processing 后处理插件Post-process Volume 和 Volume最全基础使用说明

之前我已经实现了不少后处理功能,本文其实就是将他们归类整理,以便更好的查找和理解。在Unity中,后处理(Post-Processing)是在相机所捕捉的图像上应用一些特殊效果的过程,后处理会让图像视觉效果更好(前提是做的好)。这些效果的范围有非常细微的颜色调整,也包括整体的美术风格的大修,可以让场景看起来更加真实或风格化,或者只是变得更好看。就像我们都会用手机拍照,但很多时候我们拍的原始的相片都打不到我们想要的效果。比如照片可能亮度不够,颜色不饱和或者对比度不好等。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 7896

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

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

空 979

廖雪峰Python教程[完整版]

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

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

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

guanxin0206的博客 672

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

一、概述 二、适用chuangk

小吕丶Code阶区 3480

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

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

Z 417

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

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

MitSuiTachi的博客 541

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

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

weixin_47301645的博客 199

设计模式之模板方法模式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

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

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

知唔猪的博客 1730

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

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

weixin_66095070的博客 985

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

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

宇智波带土 294

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

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

Thinkao 的博客 228
上一篇: 23种设计模式全解析
下一篇: JAVA设计模式之建造者模式
有志青年L
博客等级 码龄10年 30粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值