当前位置: 首页 > news >正文

小谈设计模式(11)—模板方法模式

小谈设计模式(11)—模板方法模式

  • 专栏介绍
    • 专栏地址
    • 专栏介绍
  • 模板方法模式
    • 角色分类
      • 抽象类(Abstract Class)
      • 具体子类(Concrete Class)
      • 抽象方法(Abstract Method)
      • 具体方法(Concrete Method)
      • 钩子方法(Hook Method)
    • 核心思想
    • Java代码实现
      • 输出
      • 分析
    • 总结

专栏介绍

专栏地址

link

专栏介绍

主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。
在这里插入图片描述

模板方法模式

这是一种行为型设计模式,用于定义算法的框架,将算法的具体实现延迟到子类中。

角色分类

抽象类(Abstract Class)

抽象类定义了一个模板方法,该方法包含了算法的框架,以及一系列基本方法的调用顺序。抽象类还可以定义抽象方法、具体方法和钩子方法,用于延迟具体实现或提供默认实现。

具体子类(Concrete Class)

具体子类继承抽象类,并实现抽象方法和钩子方法。具体子类负责实现算法的具体步骤。

抽象方法(Abstract Method)

抽象方法是在抽象类中声明的方法,由具体子类实现。抽象方法是模板方法中的基本方法,用于完成算法的一部分。
在这里插入图片描述

具体方法(Concrete Method)

具体方法是在抽象类中已经实现的方法,可以在模板方法中直接调用。具体方法是模板方法中的基本方法,用于完成算法的一部分。

钩子方法(Hook Method)

钩子方法是在抽象类中有默认实现的方法,子类可以选择是否覆盖。钩子方法可以用于在算法的不同阶段提供不同的行为。
在这里插入图片描述

核心思想

将算法的框架固定在抽象类中,而将具体实现延迟到具体子类中。抽象类定义了一个模板方法,该方法包含了算法的框架,以及一系列基本方法的调用顺序。抽象类还可以定义抽象方法、具体方法和钩子方法,用于延迟具体实现或提供默认实现。

Java代码实现

// 抽象模板类
abstract class AbstractClass {// 模板方法,定义了算法的骨架public final void templateMethod() {step1();step2();step3();}// 基本方法1protected abstract void step1();// 基本方法2protected abstract void step2();// 基本方法3protected abstract void step3();
}// 具体模板类A
class ConcreteClassA extends AbstractClass {@Overrideprotected void step1() {System.out.println("ConcreteClassA: Step 1");}@Overrideprotected void step2() {System.out.println("ConcreteClassA: Step 2");}@Overrideprotected void step3() {System.out.println("ConcreteClassA: Step 3");}
}// 具体模板类B
class ConcreteClassB extends AbstractClass {@Overrideprotected void step1() {System.out.println("ConcreteClassB: Step 1");}@Overrideprotected void step2() {System.out.println("ConcreteClassB: Step 2");}@Overrideprotected void step3() {System.out.println("ConcreteClassB: Step 3");}
}// 测试代码
public class Main {public static void main(String[] args) {AbstractClass classA = new ConcreteClassA();classA.templateMethod();System.out.println();AbstractClass classB = new ConcreteClassB();classB.templateMethod();}
}

输出

ConcreteClassA: Step 1
ConcreteClassA: Step 2
ConcreteClassA: Step 3ConcreteClassB: Step 1
ConcreteClassB: Step 2
ConcreteClassB: Step 3

分析

在上面的示例中,抽象模板类AbstractClass定义了一个模板方法templateMethod(),这个方法定义了一个算法的骨架,其中包含了多个基本方法step1()、step2()、step3()。具体模板类ConcreteClassA和ConcreteClassB继承自AbstractClass,并实现了基本方法。
在这里插入图片描述

总结

模板方法模式是一种简单但非常实用的设计模式,它通过将算法的框架固定在抽象类中,将具体实现延迟到具体子类中,提供了一种灵活而可扩展的算法设计方案。

相关文章:

小谈设计模式(11)—模板方法模式

小谈设计模式(11)—模板方法模式 专栏介绍专栏地址专栏介绍 模板方法模式角色分类抽象类(Abstract Class)具体子类(Concrete Class)抽象方法(Abstract Method)具体方法(C…...

C#程序中很多ntdll.dll、clr.dll的线程

如下图 需要“右键工程——调试——取消勾选‘启用本地代码调试’”即可。...

低代码工作流程管理系统:提升企业运营效率的利器

业务运营状况是否良好,除了人员需要配合以外,真正发挥作用的是背后的工作流程。将重复的工作进行自动化处理,确保这些流程最终指向同一个目标、实现一致的运营结果。而设计和实施不佳的工作流程则产生相反的效果——导致处理时间延长、运营成…...

HIVE SQL regexp_extract和regexp_replace配合使用正则提取多个符合条件的值

《平凡的世界》评分不错&#xff0c;《巴黎圣母院》改变成的电影不错&#xff0c;还有<<1984>>也蛮好看。 如何使用regexp_extract&regexp_replace函数将以上文本中所有书籍名称都提取出来&#xff1f; select substr(regexp_replace(regexp_extract(regexp_…...

debian 安装matlab2022b报错解决方法与问题解决思路

报错 terminate called after throwing an instance of ‘std::runtime_error’ 在安装目录执行 ./bin/glnxa64/MATLABWindow通过执行以上命令发现是和libharfbuzz库有关。 该库在调用freetype库时&#xff0c;有方法找不到。 偿试remove freetype库&#xff0c;发现该库有大…...

Jenkins集成AppScan实现

一、Jenkins上安装插件 在Jenkins里安装以下插件 ibm-security-appscanstandard-scanner 二、打开AppScan 1、配置需要扫描的地址 配置需要扫描的地址 2、记录好要扫描的URL登录序列 记录好要扫描的URL登录序列 3、导出要扫描的URL登录序列设置 导出要扫描的URL登录序列设置 三…...

10.1 File类

前言&#xff1a; java.io包中的File类是唯一一个可以代表磁盘文件的对象&#xff0c;它定义了一些用于操作文件的方法。通过调用File类提供的各种方法&#xff0c;可以创建、删除或者重命名文件&#xff0c;判断硬盘上某个文件是否存在&#xff0c;查询文件最后修改时间&…...

[论文笔记]UNILM

引言 今天带来论文Unified Language Model Pre-training for Natural Language Understanding and Generation的笔记,论文标题是 统一预训练语言模型用于自然语言理解和生成。 本篇工作提出了一个新的统一预训练语言模型(Unifield pre-trained Language Model,UniLM),可以同…...

LLM之Colossal-LLaMA-2:Colossal-LLaMA-2的简介、安装、使用方法之详细攻略

LLM之Colossal-LLaMA-2&#xff1a;Colossal-LLaMA-2的简介、安装、使用方法之详细攻略 导读&#xff1a;2023年9月25日&#xff0c;Colossal-AI团队推出了开源模型Colossal-LLaMA-2-7B-base。Colossal-LLaMA-2项目的技术细节&#xff0c;主要核心要点总结如下: >> 数据处…...

国庆作业2

select实现服务器并发 代码&#xff1a; #include <myhead.h>#define ERR_MSG(msg) do{\printf("%d\n",__LINE__);\perror(msg);\ }while(0)#define PORT 8888#define IP "192.168.1.5"int main(int argc, const char *argv[]) {//创建流式套接字…...

fork仓库的代码如何同步主仓库代码

1.背景 我fork了一份 jekyll-theme-chirpy 仓库的代码(基于 jekyll 的自建博客仓库&#xff0c;可以免服务器)&#xff0c;我需要在上面更新我的博客文章&#xff0c;但是我又想一直同步 jekyll-theme-chirpy 仓库的新功能&#xff0c;这样我可以更新自己的博客功能。所以我就…...

【Axure】元件库和母版、常见的原型规范、静态原型页面制作

添加现有元件库 点击元件库——载入 当然也可以创建元件库&#xff0c;自己画自己保存 建立京东秒杀母版 静态原型页面的制作 框架 选择以iphone8的界面大小为例&#xff0c;顶部状态栏高度为20 左侧类似于标尺&#xff0c;因为图标、文字离最左侧的间距是不一样的 信…...

在设备树中描述中断

参考文档&#xff1a; 内核 Documentation\devicetree\bindings\interrupt-controller\interrupts.txt 在设备树中&#xff0c;中断控制器节点中必须有一个属性&#xff1a; interrupt-controller&#xff0c;表明它是“中断控制器”。 还必须有一个属性&#xff1a; #interru…...

ccf_csp第一题汇总

ccf_csp第一题汇总 printf()输出格式大全&#xff08;附 - 示例代码&#xff09;现值计算AcWing 4699. 如此编码AcWing 4509. 归一化处理(小数位数根号函数)AcWing 4454. 未初始化警告AcWing 4280. 序列查询AcWing 4006. 数组推导(小陷阱)AcWing 3292. 称检测点查询AcWing 3287…...

uniapp 实现下拉筛选框 二次开发定制

前言 最近又收到了一个需求&#xff0c;需要在uniapp 小程序上做一个下拉筛选框&#xff0c;然后找了一下插件市场&#xff0c;确实有找到&#xff0c;但不过他不支持搜索&#xff0c;于是乎&#xff0c;我就自动动手&#xff0c;进行了二开定制&#xff0c;站在巨人的肩膀上&…...

实现单行/多行文本溢出

在日常开发展示页面&#xff0c;如果一段文本的数量过长&#xff0c;受制于元素宽度的因素&#xff0c;有可能不能完全显示&#xff0c;为了提高用户的使用体验&#xff0c;这个时候就需要我们把溢出的文本显示成省略号。 一. 单行文本溢出 即文本在一行内显示&#xff0c;超出…...

Spring Boot中的Binder类

介绍 Spring Boot中的Binder类是一个用于绑定属性的工具类。它可以将配置文件中的属性值绑定到Java对象中&#xff0c;从而方便地进行配置管理。 简单示例 import org.springframework.boot.context.properties.bind.Binder; import org.springframework.core.env.Environmen…...

leetcode之打家劫舍

leetcode 198 打家劫舍 leetcode 213 打家劫舍 II leetcode 337. 打家劫舍 III 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 &#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#…...

走进Spring的世界 —— Spring底层核心原理解析(一)

文章目录 前言一、Spring中是如何创建一个对象二、Bean的创建过程三、推断构造方法四、AOP大致流程五、Spring事务 前言 ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext("config.xml"); UserService userService (UserService) cont…...

快看看你的手机有没有:谷歌Android全面封杀此类软件!

谷歌坐不住了&#xff0c;因为Android应用商店中&#xff0c;充斥着大量可窃取用户数据的应用&#xff0c;所以必然要出手整治了。 一款名叫“SonicSpy”软件是整个事情的导火索&#xff0c;而该应用是典型的窃取用户数据的应用&#xff0c;其除了可以从手机中提取个人数据外&…...

spark ui 指南

spark ui 指南 1.sparkUI 基本介绍2.jobs页面3.stages 页面4.storage 页面5.environment 页面6.ececutor 页面7 sql 页面  spark ui 是反应一个spark 作业执行情况的页面,通过查看作业的执行情况,分析作业运行的状态. 1.sparkUI 基本介绍 进入运行主页面如下,主要有6各部…...

【分布式事务】

文章目录 解决分布式事务的思路seata四种模式1. XA模式2. AT模式AT模式与XA模式的区别是什么&#xff1f;脏写问题 3. TCC模式事务悬挂和空回滚 4. SAGA模式 四种模式对比口述AT模式与TCC模式高可用 什么是分布式事务&#xff1f; 分布式事务&#xff0c;就是指不是在单个服务或…...

linux 清除卸载jenkins

1、停服务进程 查看jenkins服务是否在运行&#xff0c;如果在运行&#xff0c;停掉 查看服务 ps -ef|grep jenkins 停掉进程 kill -9 XXX2、查找安装目录 find / -name "jenkins*"3、删掉相关目录 删掉相关安装目录 rm -rf /root/.jenkins/# 删掉war包 rm -rf /…...

番外4:VMware安装

step4: 安装过程中&#xff0c;有些选项不需要点&#xff08;安装地址建议选C盘或默认&#xff0c;装载在其他盘后续会报错&#xff09;&#xff0c;如&#xff1a; may error&#xff08;本人猜测安装虚拟机完整版需要C盘的一些桥插件支持&#xff09;: step5: 安装虚拟机成功…...

Oracle 19.20 patch 注意事项

1. 打patch 用root 打 /u01/app/19.0.0/grid/OPatch/opatchauto apply /u01/app/patch/35319490 2.打patch 之前 所有NODE上OPatch 版本要一样 3. OPatch 目录不要是root权限 4.打一台&#xff0c;一台自动重启。 有几个node 在几个node 打。patch 都要传到不同的node上 …...

ElementUI之增删改及表单验证

⭐⭐本文章收录与ElementUI原创专栏&#xff1a;ElementUI专栏 ⭐⭐ ElementUI的官网&#xff1a;ElementUI官网 目录 一.前言 二.使用ElementUI完成增删改 2.1 后台代码 2.2 前端代码 三.使用ElementUI完成表单验证 一.前言 本章是继上一篇的基础之上在做完善&#xff0…...

【Java 进阶篇】深入理解 JDBC:Java 数据库连接详解

数据库是现代应用程序的核心组成部分之一。无论是 Web 应用、移动应用还是桌面应用&#xff0c;几乎都需要与数据库交互以存储和检索数据。Java 提供了一种强大的方式来实现与数据库的交互&#xff0c;即 JDBC&#xff08;Java 数据库连接&#xff09;。本文将深入探讨 JDBC 的…...

Web开发-session介绍

目录 session介绍session使用场景session具体使用需要注意的是 session介绍 session 可以被看作是一种缓冲区&#xff0c;用于在多个请求之间存储和传递用户数据。在 Web 应用程序中&#xff0c;session 通常用于存储用户登录信息、购物车数据、用户偏好设置等。当用户在应用程…...

基于Qt Creator开发的坦克大战小游戏

目录 介绍开发环境技术介绍安装说明项目目录设计思想项目介绍运行演示知识点记录Gitee源码链接 介绍 &#xff01;&#xff01;&#xff01;资源图片是从网上免费下载&#xff0c;源码都是原创&#xff0c;供个人学习使用&#xff0c;非盈利&#xff01;&#xff01;&#xff…...

小说推文和短剧推广以及电影达人带货电影票

小说推文、短剧推广、电影达人&#xff08;带或电影票&#xff09;都可以通过“巨量推文“进行申请授权 小说推文和短剧推广是什么&#xff1f; 小说推文和短剧推广的逻辑其实一样&#xff0c;分为cpa拉新和cps分成的推广形式 cpa拉新是你推广的用户必须为新用户&#xff0c…...

广州高端品牌网站建设/网站建设怎么弄

第1 章 Hello Unity 3D 11.1 Unity 3D 游戏引擎进化史 11.2 Unity 3D 编辑器初印象 51.2.1 Project 视图 51.2.2 Inspector 视图 81.2.3 Hierarchy 视图 91.2.4 Game 视图 101.2.5 Scene 视图 121.2.6 绘图模式 141.2.7 渲染模式 161.2.8 场景视图控制 171.2.9 Effects 菜单和G…...

wordpress 五分钟/品牌运营推广方案

译者注 Dagger2是在Dagger1的基础上升级开发的&#xff0c;所以要学习Dagger2&#xff0c;先了解Dagger1。下文是由Dagger1的官方文档翻译而来。 参考&#xff1a; 原文链接 Dagger1项目链接 介绍 在任何应用中最好的类是那些“干活卖力”的&#xff1a;如BarcodeDecoder…...

河北建基官网/徐州seo顾问

<script type"text/javascript"> //替换字符串 function Replace(str, from, to) { return str.split(from).join(to); } // 日期类型格式成指定的字符串 function FormatDate(date, format) { format Replace(format, "…...

自己电脑做的网站如何映射到公网/在线优化工具

在系统管理或者数据库管理中&#xff0c;经常要周期性的执行某一个命令或者SQL语句。对于linux系统熟悉的人都知道linux的cron计划任务&#xff0c;能很方便地实现定期运行指定命令的功能。Mysql在5.1以后推出了事件调度器(Event Scheduler)&#xff0c;和linux的cron功能一样&…...

网站空间数据库需要多大/厦门网站搜索引擎优化

Trie 定义&#xff1a; Trie (字典树)是一种用于实现字符串快速检索的多叉树结构。Trie的每个节点都拥有若于个字符指针&#xff0c;若在插入或检索字符串时扫描到一个字符c, 就沿着当前节点的C字符指针&#xff0c;走向该指针指向的节点。 初始化 一棵空Trie仅包含一个根节点…...

wordpress产品参数多图/利尔化学股票

JDK安装与环境变量的配置 文章目录JDK安装与环境变量的配置一、JDK下载1.官网下载2.百度网盘二、JDK安装三、环境变量的配置一、JDK下载 1.官网下载 https://www.oracle.com/java/technologies/javase-jdk15-downloads.html 2.百度网盘 链接&#xff1a;https://pan.baidu.…...